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

/// A dumb lock that's just a wrapper for an [`AtomicBool`].
#[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.fetch_or(true, Ordering::Acquire)
	}

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