spin
std::sync::Mutex و دیگر موارد اولیه همگامسازی از std::sync در core یا alloc موجود نیستند. چگونه میتوانیم هماهنگسازی یا تغییرپذیری داخلی، مانند اشتراکگذاری وضعیت بین CPUهای مختلف را مدیریت کنیم؟
این crate spin معادلهای مبتنی بر spinlock، بسیاری از این موارد اولیه را ارائه میکند.
use spin::mutex::SpinMutex; static counter: SpinMutex<u32> = SpinMutex::new(0); fn main() { println!("count: {}", counter.lock()); *counter.lock() += 2; println!("count: {}", counter.lock()); }
- اگر در handlerهای وقفه قفل میکنید مراقب باشید که از بن بست(deadlock) جلوگیری کنید.
-
spinهمچنین دارای اجرای ticket lock mutex است. معادلهایRwLock,BarrierوOnceازstd::sync. وLazyبرای مقداردهی اولیه lazy. - این crate ‘once_cell’ همچنین دارای تایپهای مفیدی برای مقداردهی اولیه دیرهنگام با رویکرد کمی متفاوت به
spin::once::Onceاست. - Playground Rust شامل
spinاست، بنابراین این مثال به خوبی به صورت داخلی اجرا میشود.