use std::sync::atomic::{
AtomicBool,
Ordering::{Acquire, Release, Relaxed},
};
#[inline(always)]
pub fn lock(flag: &AtomicBool) {
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
if flag.compare_exchange_weak(false, true, Acquire, Relaxed).is_ok() { return } else { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
while flag.compare_exchange(false, true, Acquire, Relaxed).is_err() { std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop(); std::hint::spin_loop() }
}
#[inline(always)]
pub fn unlock(flag: &AtomicBool) {
flag.store(false, Release);
}