Struct concread::cowcell::asynch::CowCell

source ·
pub struct CowCell<T> { /* private fields */ }
Expand description

A conncurrently readable async cell.

This structure behaves in a similar manner to a RwLock<T>. However unlike a RwLock, writes and parallel reads can be performed at the same time. This means readers and writers do no block either other. Writers are serialised.

To achieve this a form of “copy-on-write” (or for Rust, clone on write) is used. As a write transaction begins, we clone the existing data to a new location that is capable of being mutated.

Readers are guaranteed that the content of the CowCell will live as long as the read transaction is open, and will be consistent for the duration of the transaction. There can be an “unlimited” number of readers in parallel accessing different generations of data of the CowCell.

Writers are serialised and are guaranteed they have exclusive write access to the structure.

Implementations§

source§

impl<T> CowCell<T>
where T: Clone,

source

pub fn new(data: T) -> Self

Create a new CowCell for storing type T. T must implement Clone to enable clone-on-write.

source

pub fn read<'x>(&'x self) -> CowCellReadTxn<T>

Begin a read transaction, returning a read guard. The content of the read guard is guaranteed to be consistent for the life time of the read - even if writers commit during.

source

pub async fn write<'x>(&'x self) -> CowCellWriteTxn<'x, T>

Begin a write transaction, returning a write guard. The content of the write is only visible to this thread, and is not visible to any reader until commit() is called.

source

pub async fn try_write<'x>(&'x self) -> Option<CowCellWriteTxn<'x, T>>

Attempt to create a write transaction. If it fails, and err is returned. On success the Ok(guard) is returned. See also write(&self)

Trait Implementations§

source§

impl<T: Debug> Debug for CowCell<T>

source§

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

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

impl<T: Default> Default for CowCell<T>

source§

fn default() -> CowCell<T>

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for CowCell<T>

§

impl<T> !RefUnwindSafe for CowCell<T>

§

impl<T> Send for CowCell<T>
where T: Sync + Send,

§

impl<T> Sync for CowCell<T>
where T: Sync + Send,

§

impl<T> Unpin for CowCell<T>

§

impl<T> UnwindSafe for CowCell<T>
where T: RefUnwindSafe,

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
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. 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> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

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

Initializes a with the given initializer. Read more
source§

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

Dereferences the given pointer. Read more
source§

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

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

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

impl<T, U> TryFrom<U> for T
where 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 T
where 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.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more