15.3.1 Lock オブジェクト

プリミティブロックとは、ロックが生じた際に特定のスレッドによって 所有されない同期プリミティブです。 Python では現在のところ 拡張モジュールthread で直接実装されている 最も低水準の同期プリミティブを使えます。

プリミティブロックは2つの状態、 ``ロック''または``アンロック'' があります。このロックはアンロック状態で作成されます。 ロックには基本となる二つのメソッド、acquire()release() があります。ロックの状態がアンロックである 場合、acquire() は状態をロックに変更して即座に処理を 戻します。状態がロックの場合、acquire()は他のスレッドが release() を呼出してロックの状態をアンロックに変更するまで ブロックします。その後、状態をロックに再度設定してから処理を戻します。 release() メソッドを呼び出すのはロック状態のときでなければ なりません; このメソッドはロックの状態をアンロックに変更し、即座に 処理を戻します。複数のスレッドにおいて acquire() が アンロック状態への遷移を待っているためにブロックが起きている時に release() を呼び出してロックの状態をアンロックにすると、 一つのスレッドだけが処理を進行できます。どのスレッドが処理を 進行できるのかは定義されておらず、実装によって異なるかもしれません。

全てのメソッドは原子的に実行されます。

acquire( [blocking = 1])
ブロックあり、またはブロックなしでロックを獲得します。

引数なしで呼び出した場合、ロックの状態がアンロックになるまで ブロックし、その後状態をロックにセットして真値を返します。

引数blocking の値を真にして呼び出した場合、 引数なしで呼び出したときと同じことを行ない、Trueを返します。

引数blocking の値を偽にして呼び出すとブロックしません。 引数なしで呼び出した場合にブロックするような状況であった場合には 直ちに偽を返します。それ以外の場合には、 引数なしで呼び出したときと同じ処理を行い真を返します。

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

ロックの状態がロックのとき、状態をアンロックにリセットして処理を 戻します。他のスレッドがロックがアンロック状態になるのを待って ブロックしている場合、ただ一つのスレッドだけが処理を継続できるように します。

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

戻り値はありません。

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