Struct crossbeam_channel::flavors::list::Channel

source ·
pub(crate) struct Channel<T> {
    head: CachePadded<Position<T>>,
    tail: CachePadded<Position<T>>,
    receivers: SyncWaker,
    _marker: PhantomData<T>,
}
Expand description

Unbounded channel implemented as a linked list.

Each message sent into the channel is assigned a sequence number, i.e. an index. Indices are represented as numbers of type usize and wrap on overflow.

Consecutive messages are grouped into blocks in order to put less pressure on the allocator and improve cache efficiency.

Fields§

§head: CachePadded<Position<T>>

The head of the channel.

§tail: CachePadded<Position<T>>

The tail of the channel.

§receivers: SyncWaker

Receivers waiting while the channel is empty and not disconnected.

§_marker: PhantomData<T>

Indicates that dropping a Channel<T> may drop messages of type T.

Implementations§

source§

impl<T> Channel<T>

source

pub(crate) fn new() -> Self

Creates a new unbounded channel.

source

pub(crate) fn receiver(&self) -> Receiver<'_, T>

Returns a receiver handle to the channel.

source

pub(crate) fn sender(&self) -> Sender<'_, T>

Returns a sender handle to the channel.

source

fn start_send(&self, token: &mut Token) -> bool

Attempts to reserve a slot for sending a message.

source

pub(crate) unsafe fn write(&self, token: &mut Token, msg: T) -> Result<(), T>

Writes a message into the channel.

source

fn start_recv(&self, token: &mut Token) -> bool

Attempts to reserve a slot for receiving a message.

source

pub(crate) unsafe fn read(&self, token: &mut Token) -> Result<T, ()>

Reads a message from the channel.

source

pub(crate) fn try_send(&self, msg: T) -> Result<(), TrySendError<T>>

Attempts to send a message into the channel.

source

pub(crate) fn send( &self, msg: T, _deadline: Option<Instant>, ) -> Result<(), SendTimeoutError<T>>

Sends a message into the channel.

source

pub(crate) fn try_recv(&self) -> Result<T, TryRecvError>

Attempts to receive a message without blocking.

source

pub(crate) fn recv( &self, deadline: Option<Instant>, ) -> Result<T, RecvTimeoutError>

Receives a message from the channel.

source

pub(crate) fn len(&self) -> usize

Returns the current number of messages inside the channel.

source

pub(crate) fn capacity(&self) -> Option<usize>

Returns the capacity of the channel.

source

pub(crate) fn disconnect_senders(&self) -> bool

Disconnects senders and wakes up all blocked receivers.

Returns true if this call disconnected the channel.

source

pub(crate) fn disconnect_receivers(&self) -> bool

Disconnects receivers.

Returns true if this call disconnected the channel.

source

fn discard_all_messages(&self)

Discards all messages.

This method should only be called when all receivers are dropped.

source

pub(crate) fn is_disconnected(&self) -> bool

Returns true if the channel is disconnected.

source

pub(crate) fn is_empty(&self) -> bool

Returns true if the channel is empty.

source

pub(crate) fn is_full(&self) -> bool

Returns true if the channel is full.

Trait Implementations§

source§

impl<T> Drop for Channel<T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for Channel<T>

§

impl<T> RefUnwindSafe for Channel<T>
where T: RefUnwindSafe,

§

impl<T> !Send for Channel<T>

§

impl<T> !Sync for Channel<T>

§

impl<T> Unpin for Channel<T>
where T: Unpin,

§

impl<T> !UnwindSafe for Channel<T>

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, 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, 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.