Struct utils_atomics::Lock

source ·
#[repr(transparent)]
pub struct Lock(_);
Available on crate feature alloc only.
Expand description

A synchronization primitive that can be used to coordinate threads.

Lock is a type that represents a lock, which can be used to ensure that only one thread can access a shared resource at a time.

Example

use utils_atomics::{Lock, lock};

let (lock, lock_sub) = lock();
std::thread::spawn(move || {
    // Do some work with the shared resource
    lock.wake();
});

// Do some work with the shared resource
lock_sub.wait();

Implementations§

source§

impl Lock

source

pub fn into_raw(self) -> *mut ()

Transforms the Lock into a raw mutable pointer.

source

pub unsafe fn from_raw(raw: *mut ()) -> Self

Constructs a Lock from a raw mutable pointer.

Safety

This function is unsafe because it assumes the provided pointer is valid and points to a Lock.

source

pub fn silent_drop(self)

Drops the Lock without waking up the waiting threads. This method currently leaks memory when the std feature is disabled.

source§

impl Lock

source

pub fn wake(self)

Wakes up the waiting threads associated with the Lock.

Example
use utils_atomics::{Lock, lock};

let (lock, lock_sub) = lock();
std::thread::spawn(move || {
    // Do some work with the shared resource
    lock.wake();
});

// Do some work with the shared resource
lock_sub.wait();

Trait Implementations§

source§

impl Debug for Lock

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Drop for Lock

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Lock

§

impl Send for Lock

§

impl Sync for Lock

§

impl Unpin for Lock

§

impl UnwindSafe for Lock

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.