본문 바로가기

Rust

Rust 스레드 파킹

파킹을 사용하여 잠금을 하고 해제할 수 도 있다. 스레드 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 Atomics and Locks 러스트 동시성 프로그래밍 - 예스24

최고의 성능, 최적의 안전성러스트가 선도하는 동시성 프로그래밍의 미래러스트는 안전성, 우수한 성능, 간결한 문법, 비동기 프로그래밍 지원 등 현대적인 프로그래밍 환경에 최적화된 언어로

www.yes24.com

 

'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