Barrier — 여러 스레드의 시작 동기화 배리어

Barrier — 여러 스레드의 시작 동기화 배리어

Barrier는 여러 스레드가 어떤 계산의 시작 지점을 동기화할 수 있게 해주는 동기화 도구예요. 설정한 개수의 스레드가 모두 도착할 때까지 기다렸다가, 모두 모이면 한꺼번에 통과를 시켜줘요.

출처: Rust 공식 문서

본문

pub struct Barrier { /* private fields */ }

예시

use std::sync::Barrier;
use std::thread;

let n = 10;
let barrier = Barrier::new(n);

thread::scope(|s| {
    for _ in 0..n {
        // 같은 메시지가 항상 함께 출력돼요. 서로 섞이지 않아요.
        s.spawn(|| {
            println!("before wait");
            barrier.wait();
            println!("after wait");
        });
    }
});

주요 메서드

// 지정한 개수만큼의 스레드를 막을 수 있는 새 배리어를 만들어요.
pub const fn new(n: usize) -> Barrier

// 모든 스레드가 이 지점에 모일 때까지 현재 스레드를 막아요.
pub fn wait(&self) -> BarrierWaitResult

new는 상수 함수(1.78.0부터 const)라서 정적 문맥에서도 만들 수 있어요. wait()는 주어진 수의 스레드가 모두 도착할 때까지 블록하고, 그 후에 모든 스레드를 한 번에 깨워요. 배리어는 한 번 모두 모이면 재사용할 수 있어요.

더 알아보기 (Learn more)