Struct swap::worker::Channel

source ·
pub struct Channel<T> {
    state: Mutex<ChannelState<T>>,
    consumer_wait: Condvar,
    producer_wait: Condvar,
    n_consumers: usize,
}
Expand description

MPMC (Multi Producers Multi Consumers) queue integrated with Worker.

Channel offers Channel::wait_complete() to guarantee all the tasks are executed.

This only exposes methods for producers.

Fields§

§state: Mutex<ChannelState<T>>§consumer_wait: Condvar§producer_wait: Condvar§n_consumers: usize

Implementations§

source§

impl<T> Channel<T>

source

fn new(len: usize, n_consumers: usize) -> Self

source

fn close(&self)

source

fn pop(&self) -> Option<T>

Pops a task from the channel.

If the queue is closed and also empty, this returns None. This returns all the tasks in the queue even while this is closed.

source

pub fn push(&self, item: T) -> bool

Push a task.

This blocks if the channel is full.

If the channel is closed, this returns false.

source

pub fn wait_complete(&self)

Wait until all the tasks have been executed.

This guarantees that all the tasks in this channel are not only consumed but also executed.

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for Channel<T>

§

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

§

impl<T> Sync for Channel<T>
where T: Send,

§

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.