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 をロック解除します。そうでなければ、キューの
   最初の要素を実行します。
