8.9。 ミューテックス —相互排除のサポート
バージョン2.6以降非推奨: mutex モジュールはPython3で削除されました。
mutex モジュールは、ロックの取得と解放を介して相互排除を可能にするクラスを定義します。 スレッドやマルチタスクは必要ありません(または暗示されます)が、これらの目的には役立つ可能性があります。
mutex モジュールは、次のクラスを定義します。
- class mutex.mutex
新しい(ロック解除された)ミューテックスを作成します。
ミューテックスには、「ロックされた」ビットとキューの2つの状態があります。 ミューテックスがロックされていない場合、キューは空です。 それ以外の場合、キューには、ロックの取得を待機している関数(またはメソッド)を表す0個以上の
(function, argument)
ペアが含まれます。 キューが空でないときにミューテックスのロックが解除されると、最初のキューエントリが削除され、そのfunction(argument)
ペアが呼び出されます。これは、キューがロックされていることを意味します。もちろん、マルチスレッドは暗示されていません。したがって、 lock()の面白いインターフェイスで、ロックが取得されると関数が呼び出されます。
8.9.1。 ミューテックスオブジェクト
mutex オブジェクトには次のメソッドがあります。
- mutex.test()
- ミューテックスがロックされているかどうかを確認します。
- mutex.testandset()
- 「アトミック」テストアンドセット。ロックが設定されていない場合はロックを取得し、
True
を返します。それ以外の場合は、False
を返します。
- mutex.lock(function, argument)
- ミューテックスがロックされていない限り、
function(argument)
を実行します。 ロックされている場合は、関数と引数をキューに入れます。 その場合のfunction(argument)
の実行時期については、 unlock()を参照してください。
- mutex.unlock()
- キューが空の場合はミューテックスのロックを解除し、それ以外の場合はキューの最初の要素を実行します。