Spec-Zone.ru › Tokio

Структура Barrier

pub struct Barrier { /* private fields */ }
Доступно только при включённой функции crate sync.

Барьер позволяет нескольким задачам синхронизировать начало вычислений.

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

Создаёт новый барьер, который может блокировать заданное количество задач.

Барьер будет блокировать n-1 задач, вызвавших Barrier::wait, а затем одновременно разблокирует все задачи, когда n-я задача вызовет wait.

pub async fn wait(&self) -> BarrierWaitResult

Не завершается, пока все задачи не соберутся здесь.

Барьер можно использовать повторно после того, как все задачи собрались у него, и применять непрерывно.

Один (произвольный) future получит BarrierWaitResult, для которого BarrierWaitResult::is_leader вернёт true при возврате из этой функции, а все остальные задачи получат результат, для которого is_leader вернёт false.

Безопасность при отмене

Этот метод не является безопасным при отмене.

Реализации трейтов

impl Debug for Barrier

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

Форматирует значение с помощью заданного форматировщика. Подробнее

Автоматические реализации трейтов

impl !Freeze for Barrier

impl !RefUnwindSafe for Barrier

impl !UnwindSafe for Barrier

impl Send for Barrier

impl Sync for Barrier

impl Unpin for Barrier

impl UnsafeUnpin for Barrier

Общие реализации

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

fn type_id(&self) -> TypeId

Получает TypeId для self. Подробнее

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

fn borrow(&self) -> &T

Неизменяемо заимствует принадлежащее значение. Подробнее

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

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

Изменяемо заимствует принадлежащее значение. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью переданного Span, возвращая обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span, возвращая обёртку Instrumented. Подробнее

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>

Выполняет преобразование.

impl<T> WithSubscriber for T

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Присоединяет предоставленный Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Присоединяет текущий стандартный Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/struct.Barrier.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API