spin
std::sync::Mutex
๋ฐ std::sync
์ ๊ธฐํ ๋๊ธฐํ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ core
๋๋ alloc
์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ๋๊ธฐํ ๋๋ interior mutability์ ๊ฐ์ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
spin
ํฌ๋ ์ดํธ๋ ์ด๋ฌํ ๋๊ธฐํ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ค์ ์คํ๋ก์ผ๋ก ๊ตฌํํ๊ณ ์์ต๋๋ค.
use spin::mutex::SpinMutex; static counter: SpinMutex<u32> = SpinMutex::new(0); fn main() { println!("count: {}", counter.lock()); *counter.lock() += 2; println!("count: {}", counter.lock()); }
- ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ์์ ๋ฝ์ ๊ฑธ ๊ฒฝ์ฐ, ๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ฃผ์ํ์ธ์.
spin
์๋ ํฐ์ผ ์ ๊ธ ๋ฎคํ ์ค ๊ตฌํ๋ ์์ต๋๋ค.std::sync
์RwLock
,Barrier
,Once
์ ํด๋นํ๋ ๊ฒ๋ค์ด ์ ๊ณต๋๋ฉฐ, ์ง์ฐ๋ ์ด๊ธฐํ๋ฅผ ์ํLazy
์ ํด๋นํ๋ ๊ฒ๋ ์ ๊ณต๋ฉ๋๋ค.once_cell
ํฌ๋ ์ดํธ์๋ ์ง์ฐ๋ ์ด๊ธฐํ๋ฅผ ์ํ ๋ช ๊ฐ์ง ์ ์ฉํ ํ์ ์ด ์๋๋ฐspin::once::Once
์๋ ์ฝ๊ฐ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.- Rust ํ๋ ์ด๊ทธ๋ผ์ด๋์๋
spin
์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ์ด ์์๋ ์ธ๋ผ์ธ์ผ๋ก ์คํ๋ฉ๋๋ค.