summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBotahamec <botahamec@outlook.com>2022-10-27 17:35:32 -0400
committerBotahamec <botahamec@outlook.com>2022-10-27 17:35:32 -0400
commitc2ec772dac7cf2a488af539613bf31ed15dfbaa5 (patch)
treed318df64695bca13358699fa6d5c5a811ff86e8d /src
parent9a014a0afa5dd1536ed1cc5f3cdb71304385b471 (diff)
Created a dumb `Lock` type
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs2
-rw-r--r--src/lock.rs24
2 files changed, 26 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 0922f35..53fc59a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -3,6 +3,8 @@ use std::fmt::{self, Debug};
use parking_lot::Mutex;
+mod lock;
+
thread_local! {
// safety: this is the only place where a ThreadLock is created
pub static KEY: Mutex<Option<ThreadKey>> = Mutex::new(Some(unsafe { ThreadKey::new() }));
diff --git a/src/lock.rs b/src/lock.rs
new file mode 100644
index 0000000..becdfaa
--- /dev/null
+++ b/src/lock.rs
@@ -0,0 +1,24 @@
+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)
+ }
+}