##
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つだけが進むことを許可します。

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

  戻り値はありません。