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()); }
- 인터럽트 핸들러에서 락을 걸 경우, 교착 상태가 발생하지 않도록 주의하세요.
spinalso has a ticket lock mutex implementation; equivalents ofRwLock,BarrierandOncefromstd::sync; andLazyfor lazy initialisation.once_cell크레이트에는 지연된 초기화를 위한 몇 가지 유용한 타입이 있는데spin::once::Once와는 약간 다른 접근 방식을 사용합니다.- Rust 플레이그라운드에는
spin이 포함되어 있으므로 이 예시는 인라인으로 실행됩니다.