4章スピンロックの実装
通常のMutex(「1.7 ロック:MutexとRwLock」参照)をロックする場合、そのMutexがすでにロックされていたらスレッドはスリープする。こうすることでMutexがリリースされるまでの間、資源を浪費することを避ける。しかし、Mutexがロックされる時間が非常に短く、スレッドが別のプロセッサコアで並列に実行できる場合には、スリープせずに繰り返してロックを試みるようにした方がいい場合もある。
スピンロックは、まさにこのように動作するMutexだ。すでにロックされているMutexをロックしようとした場合、ビジーループ(busy-looping)もしくはスピン(spinning)する、つまり成功するまで何度もロックの取得を試みる。プロセッササイクルを浪費することになるが、ロックのレイテンシを短縮できる場合がある。
|
本章では、「2章 アトミック操作」と「3章 メモリオーダリング」で学んだことを応用して、独自のSpinLock
型を実装し、Rustの型システムを用いて安全で使いやすいインターフェイスを提供する方法を説明する。
4.1 最小限の実装
スピンロックをゼロから実装してみよう。 ...
Get 詳解 Rustアトミック操作とロック ―並行処理実装のための低レイヤプログラミング now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.