跳到主要内容

Barrier

搜索

结构体 Barrier 

源代码
pub struct Barrier { /* 私有字段 */ }
展开描述

barrier 使多个任务能够同步某些计算的开始。

use tokio::sync::Barrier;
use std::sync::Arc;

let mut handles = Vec::with_capacity(10);
let barrier = Arc::new(Barrier::new(10));
for _ in 0..10 {
    let c = barrier.clone();
    // The same messages will be printed together.
    // You will NOT see any interleaving.
    handles.push(tokio::spawn(async move {
        println!("before wait");
        let wait_result = c.wait().await;
        println!("after wait");
        wait_result
    }));
}

// Will not resolve until all "after wait" messages have been printed
let mut num_leaders = 0;
for handle in handles {
    let wait_result = handle.await.unwrap();
    if wait_result.is_leader() {
        num_leaders += 1;
    }
}

// Exactly one barrier will resolve as the "leader"
assert_eq!(num_leaders, 1);

实现§

源代码§

impl Barrier

源代码

pub fn new(n: usize) -> Barrier

创建一个新的 barrier,可以阻塞给定数量的任务。

barrier 将阻塞调用 Barrier::waitn-1 个任务,然后在第 n 个任务调用 wait 时立即唤醒所有任务。

源代码

pub async fn wait(&self) -> BarrierWaitResult

在所有任务都在此会合并之前不会解析。

barrier 在所有任务都已合并一次后可重用,并且可以连续使用。

单个(任意的)future 将收到一个 BarrierWaitResult,从此函数返回时该结果从 BarrierWaitResult::is_leader 返回 true,而所有其他任务将收到从 is_leader 返回 false 的结果。

§取消安全性

此方法不是取消安全的。

trait 实现§

源代码§

impl Debug for Barrier

源代码§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化器格式化此值。 更多信息

自动 trait 实现§

blanket 实现§

源代码§

impl<T> Any for T
where T: 'static + ?Sized,

源代码§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
源代码§

impl<T> Borrow<T> for T
where T: ?Sized,

源代码§

fn borrow(&self) -> &T

Immutably borrows from an owned value. 更多信息
源代码§

impl<T> BorrowMut<T> for T
where T: ?Sized,

源代码§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. 更多信息
源代码§

impl<T> From<T> for T

源代码§

fn from(t: T) -> T

原样返回参数。

源代码§

impl<T, U> Into<U> for T
where U: From<T>,

源代码§

fn into(self) -> U

调用 U::from(self)

也就是说,此转换是 From<T> for U 实现选择执行的操作。

源代码§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

源代码§

type Error = Infallible

转换出错时返回的类型。
源代码§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
源代码§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

源代码§

type Error = <U as TryFrom<T>>::Error

转换出错时返回的类型。
源代码§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。