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()는 주어진 수의 스레드가 모두 도착할 때까지 블록하고, 그 후에 모든 스레드를 한 번에 깨워요. 배리어는 한 번 모두 모이면 재사용할 수 있어요.