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