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
است، بنابراین این مثال به خوبی به صورت داخلی اجرا میشود.