РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1086 of 1245 menu

Метод wait класса Barrier

Метод wait класса Barrier блокирует текущий поток до тех пор, пока все потоки, связанные с данным барьером, не вызовут этот метод. Когда последний поток достигает барьера, все ожидающие потоки разблокируются одновременно. Метод не принимает параметров и возвращает значение типа BarrierWaitResult.

Синтаксис

barrier.wait()

Пример

Давайте создадим барьер для трёх потоков и посмотрим, как каждый поток ожидает остальных:

use std::sync::{Arc, Barrier}; use std::thread; fn main() { let barrier = Arc::new(Barrier::new(3)); let mut handles = vec![]; for i in 0..3 { let b = Arc::clone(&barrier); let handle = thread::spawn(move || { println!("Поток {} достиг барьера", i); b.wait(); println!("Поток {} прошёл барьер", i); }); handles.push(handle); } for handle in handles { handle.join().unwrap(); } }

Результат выполнения кода:

Поток 0 достиг барьера Поток 1 достиг барьера Поток 2 достиг барьера Поток 0 прошёл барьер Поток 1 прошёл барьер Поток 2 прошёл барьер

Пример

Давайте используем барьер для синхронизации двух потоков перед выполнением основной работы:

use std::sync::{Arc, Barrier}; use std::thread; fn main() { let barrier = Arc::new(Barrier::new(2)); let mut handles = vec![]; for i in 0..2 { let b = Arc::clone(&barrier); let handle = thread::spawn(move || { println!("Поток {} готовится", i); b.wait(); println!("Поток {} начал работу", i); }); handles.push(handle); } for handle in handles { handle.join().unwrap(); } }

Результат выполнения кода:

Поток 0 готовится Поток 1 готовится Поток 0 начал работу Поток 1 начал работу

Смотрите также

  • класс Barrier,
    который представляет собой барьер синхронизации потоков
  • метод new,
    который создаёт новый барьер для указанного числа потоков
  • метод wait класса Condvar,
    который блокирует поток до получения уведомления
  • метод call_once класса Once,
    который гарантирует однократное выполнение инициализации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить