From 6b4951ade670acbe3cb34b2002fbcd4b4e6a7300 Mon Sep 17 00:00:00 2001 From: Mica White Date: Fri, 8 Mar 2024 11:45:15 -0500 Subject: Replace ownership with mutable access --- src/lib.rs | 50 +------------------------------------------------- 1 file changed, 1 insertion(+), 49 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index dd7354c..457fae0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,60 +3,12 @@ #![allow(clippy::module_name_repetitions)] #![allow(clippy::declare_interior_mutable_const)] -use std::any::type_name; -use std::fmt::{self, Debug}; -use std::marker::PhantomData; - -use once_cell::sync::Lazy; -use thread_local::ThreadLocal; - mod guard; mod lock; mod lockable; pub mod mutex; -use lock::{Key, Lock}; - pub use guard::LockGuard; +pub use lock::{Key, ThreadKey}; pub use lockable::Lockable; pub use mutex::Mutex; - -static KEY: Lazy> = Lazy::new(ThreadLocal::new); - -/// The key for the current thread. -/// -/// Only one of these exist per thread. To get the current thread's key, call -/// [`ThreadKey::lock`]. -pub struct ThreadKey { - phantom: PhantomData<*const ()>, // implement !Send and !Sync - _key: Key<'static>, -} - -impl Debug for ThreadKey { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - type_name::().fmt(f) - } -} - -impl ThreadKey { - /// Get the current thread's `ThreadKey`, if it's not already taken. - /// - /// The first time this is called, it will successfully return a - /// `ThreadKey`. However, future calls to this function will return - /// [`None`], unless the key is dropped or unlocked first. - #[must_use] - pub fn lock() -> Option { - KEY.get_or_default().try_lock().map(|key| Self { - phantom: PhantomData, - _key: key, - }) - } - - /// Unlocks the `ThreadKey`. - /// - /// After this method is called, a call to [`ThreadKey::lock`] will return - /// this `ThreadKey`. - pub fn unlock(key: Self) { - drop(key); - } -} -- cgit v1.2.3