7.5.1 Lock オブジェクト

プリミティブロックはロックされたとき、特定のスレッドによって所有されない 同期プリミティブです。 Pythonでは現在、最も低レベルのプリミティブロックが利用可能であり、 thread拡張モジュールによって直接実装されています。

プリミティブロックは2つの状態 - ``ロック''または``アンロック'' - を持ちます。ロックはアンロック状態で作られます。 ロックは2つの基本メソッド、acquire()release()を持ちます。 アンロック状態のとき、acquire()はロック状態へ変更し 直ちにリターンします。 ロック状態のとき、acquire()は、他のスレッドがrelease() を呼出しアンロック状態へ変更するまで、ブロックします。 そして、acquire()呼出しはロック状態へリセットしてリターンします。 release()メソッドはロック状態のときに呼ぶべきです; それはアンロック状態へ変更すると直ちにリターンします。 1つ以上のスレッドが、アンロック状態に変更されるのを待つため acquire()でブロックされているときに、 release()でアンロック状態へリセットされると、 1つのスレッドのみが先に進めます; 待っているスレッドのどれが進めるかは定義されておらず、 実装によって異なることでしょう。

全てのメソッドはアトミックに実行されます。

acquire( [blocking = 1])
ブロックまたは非ブロックのロックを獲得します。

引数なしで呼だ出すと、ロックがアンロックされるまでブロックして、 そしてロック状態へセットしリターンします。 この場合戻り値はありません。

引数blockingをTrueにセットして呼び出すと、 引数なしで呼び出したときと同じことを行ない、Trueを返します。

引数blockingをFalseにセットして呼び出すと、ブロックしません。 引数のない呼び出しにおいてブロックされる状況ならば、直ちにFalseを返します; そうでない状況ならば、引数なしで呼び出したときと同じことを行ない、 Trueを返します。

release( )
ロックを解放します。

ロック状態のとき、アンロック状態へリセットして返ります。 ロックがアンロック状態になるのを待っている他のスレッドが、 ブロックされていたとき、厳密に1つだけが進むことを許可します。

ロックがアンロック状態のとき、このメソッドを呼び出してはいけません。

戻り値はありません。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。