์ค๋ ๋
๋ฌ์คํธ์ ์ค๋ ๋๋ ๋ค๋ฅธ ์ธ์ด์ ์ค๋ ๋์ ์ ์ฌํ๊ฒ ๋์ํฉ๋๋ค:
use std::thread; use std::time::Duration; fn main() { thread::spawn(|| { for i in 1..10 { println!("Count in thread: {i}!"); thread::sleep(Duration::from_millis(5)); } }); for i in 1..5 { println!("Main thread: {i}"); thread::sleep(Duration::from_millis(5)); } }
- ์ค๋ ๋๋ ๋ชจ๋ ๋ฐ๋ชฌ ์ค๋ ๋์ ๋๋ค. ๋ฐ๋ผ์ ๋ฉ์ธ ์ค๋ ๋๋ ์ด ์ค๋ ๋๋ค์ด ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์์ต๋๋ค.
- ํ ์ค๋ ๋์์ ๋ฐ์ํ ํจ๋์ ๋ค๋ฅธ ์ค๋ ๋์๊ฒ ์ํฅ์ ๋ผ์น์ง ์์ต๋๋ค.
- ํจ๋์ ์ถ๊ฐ์ ๋ณด(ํ์ด๋ก๋)๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, ์ด๋
downcast_ref
๋ก ํ์ด๋ณผ ์ ์์ต๋๋ค.
- ํจ๋์ ์ถ๊ฐ์ ๋ณด(ํ์ด๋ก๋)๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, ์ด๋
ํค ํฌ์ธํธ:
-
๋ฉ์ธ ์ค๋ ๋๊ฐ ์์ ์ค๋ ๋๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ์ ์์ ์ค๋ ๋์ for๋ฌธ์ 10๊น์ง ๊ฐ์ง ์์ต๋๋ค.
-
๋ง์ฝ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์์ ์ค๋ ๋๊ฐ ๋๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด
let handle = thread::spawn(...)
์ผ๋ก ์ค๋ ๋๋ฅผ ์ ์ธํ ํhandle.join()
๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํฉ๋๋ค. -
์์ ์ค๋ ๋์์ ๋ฐ์ํ ํจ๋์ด ๋ฉ์ธ ์ค๋ ๋์๋ ์ํฅ์ ์ฃผ์ง ์์์ ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค.
-
handle.join()
์ฌ์ฉ์Result
๋ฐํ๊ฐ์ ํตํด ํจ๋์ ์ถ๊ฐ์ ๋ณด์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด ์์ ์์Any
์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ํด ๋ณด๋ฉด ์ข์ต๋๋ค.