mutex モジュールでは、ロック (lock) の獲得と解除によって 排他制御を可能にするクラスを定義しています。 排他制御はスレッドやマルチタスクを使う上で便利かもしれませんが、 このクラスがそうした機能を必要として (いたり、想定して) いるわけでは ありません。
mutexモジュールでは以下のクラスを定義しています:
) |
mutex には 2 つの状態変数 -- ``ロック'' ビット (locked bit) と
キュー (queue) があります。
mutex がロックされていなければ、キューは空です。
それ以外の場合、キューは空になっているか、
(function, argument)
のペアが一つ以上入っています。
このペアはロックを獲得しようと待機している関数 (またはメソッド)
を表しています。
キューが空でないときに mutex をロック解除すると、キューの先頭の
エントリをキューから除去し、そのエントリのペアに基づいて
function(argument)
を呼び出します。
これによって、先頭にあったエントリが新たなロックを獲得します。
当然のことながらマルチスレッドの制御には利用できません - というのも、 lock() が、ロックを獲得したら関数を呼び出すという 変なインタフェースだからです。