Condvar — 조건 변수
Condvar — 조건 변수
Condvar(조건 변수, Condition Variable)는 어떤 이벤트가 발생하기를 기다리는 동안 CPU 시간을 소모하지 않고 스레드를 블록할 수 있게 해주는 동기화 도구예요.
출처: Rust 공식 문서
본문
pub struct Condvar { /* private fields */ }
조건 변수는 보통 불리언 조건(predicate)과 뮤텍스(mutex)와 함께 사용돼요. 스레드가 블록해야 한다고 판단하기 전에 조건을 항상 뮤텍스 안에서 확인해요.
이 모듈의 함수는 현재 실행 스레드를 블록해요. 하나의 조건 변수에 여러 개의 뮤텍스를 사용하려고 하면 런타임 패닉이 발생할 수 있어요.
예시
use std::sync::{Arc, Mutex, Condvar};
use std::thread;
let pair = Arc::new((Mutex::new(false), Condvar::new()));
let pair2 = Arc::clone(&pair);
// 잠금 안에서 새 스레드를 생성하고, 그것이 시작하길 기다려요.
thread::spawn(move || {
let (lock, cvar) = &*pair2;
let mut started = lock.lock().unwrap();
*started = true;
// 값이 바뀌었음을 조건 변수에 알려요.
cvar.notify_one();
});
// 스레드가 시작되기를 기다려요.
let (lock, cvar) = &*pair;
let mut started = lock.lock().unwrap();
while !*started {
started = cvar.wait(started).unwrap();
}
주요 메서드로는 new, wait, wait_timeout, notify_one, notify_all 등이 있어요.