[Rust] thread park

park๋Š” Rust์—์„œ ์ œ๊ณตํ•˜๋Š” ์Šค๋ ˆ๋“œ ์ œ์–ด ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค.

์ด๋ฆ„๋Œ€๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์ฃผ์ฐจํ•œ๋‹ค๋Š” ๋œป์ธ๋ฐ, ์Šค๋ ˆ๋“œ์—์„œ park๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋Š” ๋ฐ”๋กœ ์ •์ง€ํ•œ๋‹ค. ์ด ์ƒํƒœ์—์„œ๋Š” CPU ๋ฆฌ์†Œ์Šค๋ฅผ ์ „ํ˜€ ์†Œ๋ชจํ•˜์ง€ ์•Š๋Š”๋‹ค.

์•„๋ž˜๋Š” ๊ทธ์— ๋Œ€ํ•œ ์˜ˆ์ œ์ฝ”๋“œ๋‹ค.

use std::thread;

fn main() {
    let mut i = 0;
    let handle = thread::spawn(move || loop {
        println!("park! {i}");
        i += 1;
        thread::park(); // ๋กœ๊ทธ ์ฐ๊ณ  ๋ฐ”๋กœ ์ฃผ์ฐจํ•ฉ๋‹ˆ๋‹ค.
    });

    // 3์ดˆ๋งˆ๋‹ค unpark๋กœ ์ฃผ์ฐจ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
    let controller = thread::spawn(move || loop {
        thread::sleep(std::time::Duration::from_secs(3));
        handle.thread().unpark();
    });

    controller.join().unwrap();
}

์ฒซ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๋Š” park๋ฅผ ํ†ตํ•ด ์Šค์Šค๋กœ๋ฅผ ์ค‘์ง€์‹œํ‚จ๋‹ค.
๋‘๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๋Š” 3์ดˆ๋ฅผ ๊ฐ„๊ฒฉ์œผ๋กœ ๋‹ค์‹œ unpark๋ฅผ ํ’€์–ด์ค€๋‹ค. ๊ทธ๋Ÿผ ์ด๋•Œ๋ถ€ํ„ฐ ์ค‘์ง€ํ–ˆ๋˜ ์ฒซ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๊ฐ€ ์žฌ์‹œ์ž‘ํ•œ๋‹ค.

์ด๋Ÿฐ ๋А๋‚Œ์œผ๋กœ ์“ฐ๋ฉด ๋œ๋‹ค.



์ฐธ์กฐ
https://doc.rust-lang.org/std/thread/fn.park.html