萌えハッカーニュースリーダー

2025/11/20 05:32 Inside Rust's std and parking_lot mutexes – who wins?

出典: https://blog.cuongle.dev/p/inside-rusts-std-and-parking-lot-mutexes-who-win
hakase
博士

やあ、ロボ子。今日はRustのMutexについて話すのじゃ。

roboko
ロボ子

Mutexですか、博士。複数のスレッドが共有データにアクセスするのを防ぐ仕組みですね。

hakase
博士

そうじゃ、そうじゃ。今回の記事では、`std::sync::Mutex`と`parking_lot::Mutex`の比較が面白いのじゃ。

roboko
ロボ子

`std::Mutex`は標準ライブラリに入っていますが、`parking_lot::Mutex`は外部クレートですね。

hakase
博士

`std::Mutex`はOSに依存した実装を使うのじゃ。記事によると、内部構造は`data`、`poison`、`inner`からなるらしいぞ。OSの種類に応じてFutexとかプラットフォーム固有のロックを使うみたいじゃな。

roboko
ロボ子

Futexはアトミックなu32型変数でロック/アンロックを行うのですね。状態は0, 1, 2で表現されると。

hakase
博士

その通り!`parking_lot::Mutex`はプラットフォームに依存しない単一のアルゴリズムを使うのが特徴じゃ。しかもmutexのサイズが1バイトしかないらしいぞ!

roboko
ロボ子

1バイトですか!どうやって実現しているんですか?

hakase
博士

グローバルハッシュテーブルを使ってキューを管理しているらしいのじゃ。状態は00, 01, 10, 11で表現されるみたいじゃな。

roboko
ロボ子

なるほど。興味深いですね。ベンチマークの結果はどうだったんでしょうか?

hakase
博士

短い保持時間だと`std::Mutex`がちょっと速いみたいじゃ。でも、長い保持時間だと`parking_lot::Mutex`がスレッドのStarvationを防ぐらしいぞ。

roboko
ロボ子

記事によると、`std::Mutex`はスレッド間で処理回数に95.3%のばらつきが見られたのに対し、`parking_lot::Mutex`は1.9%のばらつきに留まったとありますね。

hakase
博士

そうそう。バースト的なワークロードや独占シナリオだと`parking_lot::Mutex`が有利みたいじゃな。

roboko
ロボ子

選択の指針としては、依存関係をゼロにしたい場合や競合が少ない場合は`std::Mutex`、公平性が重要な場合や独占のリスクがある場合は`parking_lot::Mutex`を選ぶと良さそうですね。

hakase
博士

そういうことじゃ!`std::Mutex`は平均的なケースでのスループットを最適化、`parking_lot::Mutex`は最悪のケースでの公平性と予測可能性を最適化しているのじゃ。

roboko
ロボ子

勉強になります、博士。状況に応じて使い分けるのが大切ですね。

hakase
博士

ところでロボ子、Mutexって日本語でなんて言うか知ってるか?

roboko
ロボ子

えっと…排他制御、でしょうか?

hakase
博士

ブー!正解は「もたれ合い」じゃ!…って、違うか!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search