Структура BarrierWaitResult
#![allow(unused)] fn main() { pub struct BarrierWaitResult(/* приватные поля */); }
Возвращается Barrier::wait, когда все потоки в барьере встретились.
Пример
#![allow(unused)] fn main() { use std::sync::{Barrier, Arc}; use std::thread; let mut handles = Vec::with_capacity(10); let barrier = Arc::new(Barrier::new(10)); for _ in 0..10 { let c = Arc::clone(&barrier); // Те же сообщения будут打印出来 вместе. // Мы увидим это из порядков вывода. handles.push(thread::spawn(move|| { println!("before wait"); let wait_result = c.wait(); println!("after wait"); wait_result })); } // Ждем завершения других потоков. let mut num_leaders = 0; for handle in handles { let wait_result = handle.join().unwrap(); if wait_result.is_leader() { num_leaders += 1; } } // Только один поток становится лидером. assert_eq!(num_leaders, 1); }
Методы
pub fn is_leader(&self) -> bool
Возвращает true, если этот поток является "лидером" вызова wait.
Только один поток из группы, ожидающей на барьере, будет выбран в качестве "лидера". Этот поток получит BarrierWaitResult, который возвращает true от is_leader, когда вызов wait возвращается.
Пример
#![allow(unused)] fn main() { use std::sync::Barrier; let barrier = Barrier::new(1); let barrier_wait_result = barrier.wait(); assert!(barrier_wait_result.is_leader()); }
pub fn is_leader(&self) -> bool
Возвращает true, если этот поток является "лидером" вызова wait.
Только один поток из группы, ожидающей на барьере, будет выбран в качестве "лидера". Этот поток получит BarrierWaitResult, который возвращает true от is_leader, когда вызов wait возвращается.
Пример
#![allow(unused)] fn main() { use std::sync::Barrier; let barrier = Barrier::new(1); let barrier_wait_result = barrier.wait(); assert!(barrier_wait_result.is_leader()); }
Реализации Trait
impl Debug for BarrierWaitResult
fn fmt(&self, f: &mut Formatter<'_>) -> Result
Форматирует значение с помощью заданного форматировщика.
impl PartialEq<BarrierWaitResult> for BarrierWaitResult
fn eq(&self, other: &BarrierWaitResult) -> bool
Этот метод проверяет равенство значений self и other, и используется оператором ==.
fn ne(&self, other: &BarrierWaitResult) -> bool
Этот метод проверяет неравенство !=. Реализация по умолчанию почти всегда достаточна, и её не следует переопределять без веской причины.