[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๋ฅผ ํ์ด์ค๋ค. ๊ทธ๋ผ ์ด๋๋ถํฐ ์ค์งํ๋ ์ฒซ๋ฒ์งธ ์ค๋ ๋๊ฐ ์ฌ์์ํ๋ค.
์ด๋ฐ ๋๋์ผ๋ก ์ฐ๋ฉด ๋๋ค.