spin

std::sync::Mutex 和其他來自 std::sync 的同步基元,都無法用於 corealloc。我們能如何管理同步處理作業或內部可變動性 (例如為了在不同 CPU 之間共用狀態) 呢?

spin Crate 針對許多這類基元,提供以自旋鎖為基礎的同等項目。

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::syncRwLockBarrierOnce 的同等項目;以及用於延遲初始化的 Lazy
  • once_cell Crate 也具備一些實用型別,適合用於晚期初始化,與 spin::once::Once 的做法略有不同。
  • Rust Playground 包含 spin,因此這個範例可在行內執行。