spin

std::sync::Mutex та інші примітиви синхронізації з std::sync недоступні в core або alloc. Як ми можемо керувати синхронізацією або внутрішньою мутабельністю, наприклад, для обміну станом між різними CPU?

Крейт spin надає еквіваленти багатьох із цих примітивів на основі спін-блокування.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

  • Будьте обережні, щоб уникнути взаємоблокувань, якщо ви використовуєте блокування в обробниках переривань.
  • spin також має реалізацію квиткового м’ютексу блокування; еквіваленти RwLock, Barrier і Once з std::sync; і Lazy для ледачої ініціалізації.
  • Крейт once_cell також має кілька корисних типів для пізньої ініціалізації з дещо іншим підходом до spin::once::Once.
  • Rust Playground містить spin, тож цей приклад добре працюватиме вбудовано.