pub struct PhantomMutex;Expand description
A zero-sized raw mutex implementation that does not perform physical locking.
PhantomMutex can be used as the raw lock type in a KMutex<Class, PhantomMutex> field
to serve as a zero-sized “phantom” lock in structs where physical synchronization is managed
by an external shared lock (such as a ref-counted PeerHolder for peered dispatchers).
Using KMutex<Class, PhantomMutex> allows structs to integrate with #[guarded] and
#[guarded_by(...)] without allocating memory for a physical mutex in every instance.
§Example
use ksync::{KCell, KMutex, PhantomMutex, guarded};
#[guarded]
struct RealObject {
#[mutex]
mu: KMutex,
}
#[guarded]
struct PeeredObject {
#[mutex(RealObjectMuClass)]
mu: KMutex<PhantomMutex>,
#[guarded_by(mu)]
value: KCell<i32>,
}
// When holding the shared physical mutex (`real_obj.mu`), call `lock_mu` to access fields
// protected by the zero-sized `PhantomMutex`:
ksync::lock!(let guard = phantom_obj.lock_mu(&real_obj.mu));
let value = guard.value();
// If already holding a lock token from another guard of the same class, call `guard_mu`
// to obtain an accessor object without re-locking:
let other_value = other_phantom_obj.guard_mu(guard.token()).value();Implementations§
Source§impl PhantomMutex
impl PhantomMutex
Trait Implementations§
Source§impl Clone for PhantomMutex
impl Clone for PhantomMutex
Source§fn clone(&self) -> PhantomMutex
fn clone(&self) -> PhantomMutex
Returns a duplicate of the value. Read more
1.0.0 (const: unstable)§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for PhantomMutex
Source§impl Debug for PhantomMutex
impl Debug for PhantomMutex
Source§impl Default for PhantomMutex
impl Default for PhantomMutex
Source§fn default() -> PhantomMutex
fn default() -> PhantomMutex
Returns the “default value” for a type. Read more
Source§impl HasPinData for PhantomMutex
impl HasPinData for PhantomMutex
Source§impl RawLock for PhantomMutex
impl RawLock for PhantomMutex
Source§type LockEntry = ()
type LockEntry = ()
Opaque stack entry storage type used by the lock validation loop detector (e.g. LockDep).
Source§type DefaultPolicy = PhantomMutexPolicy
type DefaultPolicy = PhantomMutexPolicy
Default policy that should be used when acquiring this lock.
Source§unsafe fn init(_class_id: *const c_void) -> impl PinInit<Self, Infallible>where
Self: Sized,
unsafe fn init(_class_id: *const c_void) -> impl PinInit<Self, Infallible>where
Self: Sized,
Returns a PinInit block to initialize the raw mutex in-place. Read more
Source§fn as_mut_ptr(&self) -> *mut c_void
fn as_mut_ptr(&self) -> *mut c_void
Convert the raw mutex reference to a standard c_void pointer for FFI.
Source§const LOCK_FLAGS: LockFlags = lockdep::LOCK_FLAGS_NONE
const LOCK_FLAGS: LockFlags = lockdep::LOCK_FLAGS_NONE
Flags specifying validation rules for the lock class.
Auto Trait Implementations§
impl Freeze for PhantomMutex
impl RefUnwindSafe for PhantomMutex
impl Send for PhantomMutex
impl Sync for PhantomMutex
impl UnsafeUnpin for PhantomMutex
impl UnwindSafe for PhantomMutex
Blanket Implementations§
§impl<T> Any for Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
🔬This is a nightly-only experimental API. (
clone_to_uninit)§impl<T, U> Into<U> for Twhere
U: From<T>,
impl<T, U> Into<U> for Twhere
U: From<T>,
Source§impl<T> PinInit<T> for T
impl<T> PinInit<T> for T
Source§unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), !>
unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), !>
Initializes
slot. Read moreSource§fn pin_chain<F>(self, f: F) -> ChainPinInit<Self, F, T, E>where
F: FnOnce(Pin<&mut T>) -> Result<(), E>,
fn pin_chain<F>(self, f: F) -> ChainPinInit<Self, F, T, E>where
F: FnOnce(Pin<&mut T>) -> Result<(), E>,
First initializes the value using
self then calls the function f with the initialized
value. Read more