8.9. mutex
--- 排他制御¶
バージョン 2.6 で非推奨: mutex
モジュールは Python 3 で削除されました。
mutex
モジュールでは、ロック (lock) の獲得と解除によって排他制御を可能にするクラスを定義しています。排他制御は threading
やマルチタスクを使う上で便利かもしれませんが、このクラスがそうした機能を必要として (いたり、想定して) いるわけではありません。
mutex
モジュールでは以下のクラスを定義しています:
-
class
mutex.
mutex
¶ 新しい (ロックされてない) mutex を作ります。
mutex には 2 つの状態変数 --- "ロック" ビット (locked bit) とキュー (queue) があります。 mutex がロックされていなければ、キューは空です。それ以外の場合、キューは空になっているか、
(function, argument)
のペアが一つ以上入っています。このペアはロックを獲得しようと待機している関数 (またはメソッド) を表しています。キューが空でないときに mutex をロック解除すると、キューの先頭のエントリをキューから除去し、そのエントリのペアに基づいてfunction(argument)
を呼び出します。これによって、先頭にあったエントリが新たなロックを獲得します。当然のことながらマルチスレッドの制御には利用できません -- というのも、
lock()
が、ロックを獲得したら関数を呼び出すという変なインタフェースだからです。
8.9.1. mutex オブジェクト¶
mutex
には以下のメソッドがあります:
-
mutex.
test
()¶ mutex がロックされているかどうか調べます。
-
mutex.
testandset
()¶ 「原子的 (Atomic)」な Test-and-Set 操作です。ロックがセットされていなければ獲得して
True
を返します。それ以外の場合にはFalse
を返します。
-
mutex.
lock
(function, argument)¶ mutex がロックされていなければ
function(argument)
を実行します。 mutex がロックされている場合、関数とその引数をキューに置きます。キューに置かれたfunction(argument)
がいつ実行されるかについてはunlock()
を参照してください。
-
mutex.
unlock
()¶ キューが空ならば mutex をロック解除します。そうでなければ、キューの最初の要素を実行します。