pub struct Worker<T> { /* private fields */ }
Expand description
A worker queue.
This is a FIFO or LIFO queue that is owned by a single thread, but other threads may steal tasks from it. Task schedulers typically create a single worker queue per thread.
§Examples
A FIFO worker:
use crossbeam_deque::{Steal, Worker};
let w = Worker::new_fifo();
let s = w.stealer();
w.push(1);
w.push(2);
w.push(3);
assert_eq!(s.steal(), Steal::Success(1));
assert_eq!(w.pop(), Some(2));
assert_eq!(w.pop(), Some(3));
A LIFO worker:
use crossbeam_deque::{Steal, Worker};
let w = Worker::new_lifo();
let s = w.stealer();
w.push(1);
w.push(2);
w.push(3);
assert_eq!(s.steal(), Steal::Success(1));
assert_eq!(w.pop(), Some(3));
assert_eq!(w.pop(), Some(2));
Implementations§
Source§impl<T> Worker<T>
impl<T> Worker<T>
Sourcepub fn new_fifo() -> Worker<T>
pub fn new_fifo() -> Worker<T>
Creates a FIFO worker queue.
Tasks are pushed and popped from opposite ends.
§Examples
use crossbeam_deque::Worker;
let w = Worker::<i32>::new_fifo();
Sourcepub fn new_lifo() -> Worker<T>
pub fn new_lifo() -> Worker<T>
Creates a LIFO worker queue.
Tasks are pushed and popped from the same end.
§Examples
use crossbeam_deque::Worker;
let w = Worker::<i32>::new_lifo();
Sourcepub fn stealer(&self) -> Stealer<T>
pub fn stealer(&self) -> Stealer<T>
Creates a stealer for this queue.
The returned stealer can be shared among threads and cloned.
§Examples
use crossbeam_deque::Worker;
let w = Worker::<i32>::new_lifo();
let s = w.stealer();
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if the queue is empty.
use crossbeam_deque::Worker;
let w = Worker::new_lifo();
assert!(w.is_empty());
w.push(1);
assert!(!w.is_empty());
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of tasks in the deque.
use crossbeam_deque::Worker;
let w = Worker::new_lifo();
assert_eq!(w.len(), 0);
w.push(1);
assert_eq!(w.len(), 1);
w.push(1);
assert_eq!(w.len(), 2);
Trait Implementations§
Auto Trait Implementations§
impl<T> !Freeze for Worker<T>
impl<T> !RefUnwindSafe for Worker<T>
impl<T> !Sync for Worker<T>
impl<T> Unpin for Worker<T>
impl<T> UnwindSafe for Worker<T>where
T: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 32 bytes