pub struct Barrier { /* private fields */ }Implementations§
Source§impl Barrier
impl Barrier
pub fn new(num: usize, key: &str, client: Client) -> Self
Sourcepub fn wait(&mut self) -> BarrierWaitResult
pub fn wait(&mut self) -> BarrierWaitResult
Blocks the current thread until all threads have rendezvoused here.
Barriers are re-usable after all threads have rendezvoused once, and can be used continuously.
A single (arbitrary) thread will receive a BarrierWaitResult that
returns true from BarrierWaitResult::is_leader() when returning
from this function, and all other threads will receive a result that
will return false from BarrierWaitResult::is_leader().
The barrier needs to be mutable, because it guarantees that the barrier is only used once in thread. If you want to synchronize threads, you need to create a new barrier for each thread, so it has its own uuid.
§Examples
use dtypes::redis::sync::Barrier;
use std::thread;
let n = 10;
let mut handles = Vec::with_capacity(n);
let client = redis::Client::open("redis://localhost:6379").unwrap();
for _ in 0..n {
// The same messages will be printed together.
// You will NOT see any interleaving.
let mut barrier = Barrier::new(n, "barrier_doc_test2", client.clone());
handles.push(thread::spawn(move|| {
println!("before wait");
barrier.wait();
println!("after wait");
}));
}
// Wait for other threads to finish.
for handle in handles {
handle.join().unwrap();
}Trait Implementations§
Auto Trait Implementations§
impl Freeze for Barrier
impl !RefUnwindSafe for Barrier
impl Send for Barrier
impl Sync for Barrier
impl Unpin for Barrier
impl !UnwindSafe for Barrier
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
Mutably borrows from an owned value. Read more