Skip to main content

Srcu

Struct Srcu 

Source
pub struct Srcu { /* private fields */ }
Expand description

Sleepable read-copy update primitive.

SRCU readers may sleep while holding the read-side guard.

The destructor waits for active readers and callbacks, so it may sleep. If a read-side guard has been leaked, dropping an Srcu may never return.

§Invariants

This represents a valid struct srcu_struct initialized by the C SRCU API and it remains pinned and valid until the pinned destructor runs.

Implementations§

Source§

impl Srcu

Source

pub fn project<'__pin>(self: Pin<&'__pin mut Self>) -> SrcuProjection<'__pin>

Pin-projects all fields of Self.

These fields are structurally pinned:

  • inner

These fields are not structurally pinned:

Source§

impl Srcu

Source

pub fn new( name: &'static CStr, key: Pin<&'static LockClassKey>, ) -> impl PinInit<Self, Error>

Creates a new SRCU instance.

Source

pub fn read_lock(&self) -> Guard<'_>

Enters an SRCU read-side critical section.

Leaking the returned Guard leaves the SRCU read-side critical section active and makes drop sleep forever.

Source

pub fn synchronize(&self)

Waits until all pre-existing SRCU readers have completed.

Source

pub fn synchronize_expedited(&self)

Waits until all pre-existing SRCU readers have completed, expedited.

This requests a lower-latency grace period than Srcu::synchronize typically at the cost of higher system-wide overhead. Prefer Srcu::synchronize by default and use this variant only when reducing reset or teardown latency is more important than the extra cost.

Trait Implementations§

Source§

impl Drop for Srcu

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl HasPinData for Srcu

Source§

type PinData = __ThePinData

Source§

unsafe fn __pin_data() -> Self::PinData

Source§

impl PinnedDrop for Srcu

Source§

fn drop(self: Pin<&mut Self>, _: OnlyCallFromDrop)

Executes the pinned destructor of this type. Read more
Source§

impl Send for Srcu

Source§

impl Sync for Srcu

Auto Trait Implementations§

§

impl !Freeze for Srcu

§

impl !RefUnwindSafe for Srcu

§

impl !UnsafeUnpin for Srcu

§

impl UnwindSafe for Srcu

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Init<T> for T

Source§

fn chain<F>(self, f: F) -> ChainInit<Self, F, T, E>
where F: FnOnce(&mut T) -> Result<(), E>,

First initializes the value using self then calls the function f with the initialized value. Read more
Source§

impl<T, U> Into<U> for T
where 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.

Source§

impl<T> KnownSize for T

Source§

const MIN_SIZE: usize = const MIN_SIZE: usize = size_of::<T>();

Minimum size of this type known at compile-time.
Source§

const MIN_ALIGN: Alignment = const MIN_ALIGN: Alignment = Alignment::of::<T>();

Minimum alignment of this type known at compile-time.
Source§

fn size(_: *const T) -> usize

Get the size of an object of this type in bytes, with the metadata of the given pointer.
Source§

impl<T> PinInit<T> for T

Source§

unsafe fn __init(self, slot: *mut T) -> Result<(), Infallible>

Initializes slot. Read more
Source§

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
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

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

Source§

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 T
where U: TryFrom<T>,

Source§

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.
Source§

impl<T, U, const N: u32> TryIntoBounded<T, N> for U
where T: Integer, U: TryInto<T>,

Source§

fn try_into_bounded(self) -> Option<Bounded<T, N>>

Attempts to convert self into a Bounded using N bits. Read more