summaryrefslogtreecommitdiff
path: root/src/lock.rs
blob: becdfaa926857e4fec3f9357249af5ba0bee33b9 (plain)
use std::sync::atomic::{AtomicBool, Ordering};

#[derive(Debug, Default)]
pub struct Lock {
	is_locked: AtomicBool,
}

impl Lock {
	pub const fn new() -> Self {
		Self {
			is_locked: AtomicBool::new(false),
		}
	}

	pub fn try_lock(&self) -> bool {
		self.is_locked
			.compare_exchange_weak(false, true, Ordering::Acquire, Ordering::Relaxed)
			.is_ok()
	}

	pub fn unlock(&self) {
		self.is_locked.store(false, Ordering::Release)
	}
}