3

ミューテックスを実装する際には、次のようないくつかのアーキテクチャの選択肢があります。

  1. 回転ミューテックス (スピンロック)

  2. ミューテックスのスリープ中 (WAITING の間、FIFO スリープ キューが維持されます)

  3. ミューテックスを譲る (WAITING 時にスケジューラーを呼び出して別のプロセスを実行する)

Yielding Mutex が最も好まれないのはなぜですか? また、それを使用した場合の結果はどれほど深刻でしょうか?

4

1 に答える 1

2

スリープ中のミューテックスはより公平です。ミューテックスを解放すると、飢餓が発生する可能性があります。

譲歩モデルの問題点は、他のプロセスがミューテックスをスクープしている間 ( bargingも参照)、プロセスが何度も譲歩を求められるか、はるかに短い時間だけ待機する必要があることです。

新しいプロセスがキューに追加される方法によっては、特定のプロセスが順番に達するたびに、ミューテックスが既に使用されているために強制的に譲歩され、プロセスが枯渇することさえあります。

FIFO モデルは、待機中のプロセスが先着順で提供されることを保証します。OS に実装するのは難しいですが、より公平です。

モデルはより複雑になる可能性があります。たとえば、OS にもプロセスの優先順位がある場合があり、優先順位は時間の経過とともに変化する可能性があります。その場合、キュー システムの実装はさらに難しくなる可能性があります。

于 2013-09-06T00:36:18.190 に答える