From 58ca9615b99417b76118b606be956185ea5894f9 Mon Sep 17 00:00:00 2001 From: Christian Cunningham Date: Fri, 26 Aug 2022 19:00:35 -0700 Subject: Ordering --- src/sync.rs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/sync.rs b/src/sync.rs index e0a8767..8c20071 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -124,24 +124,30 @@ impl interface::Mutex for SpinLock { // Loop until acquired the lock match self .lock - .compare_exchange(false, true, Ordering::Acquire, Ordering::Acquire) + .compare_exchange(false, true, Ordering::Acquire, Ordering::Relaxed) { Ok(false) => { break; } - Ok(true) => { - } - Err(true) => { - break; - } - Err(false) => {} + _ => {} } } let data = unsafe { &mut *self.data.get() }; let res = f(data); // Release the lock after finished with the underlying data - self.lock.store(false, Ordering::Release); + loop { + // Loop until acquired the lock + match self + .lock + .compare_exchange(true, false, Ordering::Release, Ordering::Relaxed) + { + Ok(false) => { + break; + } + _ => {} + } + } res } } -- cgit v1.2.1