파킹을 사용하여 잠금을 하고 해제할 수 도 있다. 스레드 park()는 잠금, unpark() 잠금해제이다.
예를 들어 큐가 비어 있으면 스레드를 잠금하고 다른 곳에서 스레드를 잠금해제하여 깨워서 1초동안 0부터 시작하여 값을 호출한다.
use std::collections::VecDeque;
use std::sync::Mutex;
use std::thread;
use std::time::Duration;
fn main() {
let queue = Mutex::new(VecDeque::<i32>::new());
thread::scope(|s|{
let t = s.spawn(|| loop {
let item = queue.lock().unwrap().pop_front();
if let Some(item) = item {
dbg!(item);
} else {
// 잠금
thread::park();
}
});
for i in 0..{
queue.lock().unwrap().push_back(i);
// 잠금해제하여 0부터 값이 계속 호출한다.
t.thread().unpark();
// 1초마다 실행
thread::sleep(Duration::from_secs(1));
}
})
}
https://www.yes24.com/Product/Goods/124706673
'Rust' 카테고리의 다른 글
러스트로 리눅스 wc명령어 구현 (0) | 2024.08.14 |
---|---|
Rust 아토믹(atomic)연산 스레드 (0) | 2024.02.04 |
Rust 스레드 조건 변수 대기와 알림 (0) | 2024.02.04 |
타입 가드 (0) | 2024.01.28 |
Rust Mutex 스레드 (0) | 2024.01.27 |