[解決済み】LockとRLockの違いは何ですか?
質問
から ドキュメント :
threading.RLock() -- 。 新しいリエントラントロックオブジェクトを返すファクトリー関数です。リエントラントロックは、それを取得したスレッドによって解放されなければなりません。スレッドが一度リエントラントロックを取得すると、同じスレッドがブロックすることなく再度取得することができます。
なぜこれが必要なのか、よくわかりません。
とはどう違うのでしょうか?
Rlock
と
Lock
?
解決方法は?
主な違いは
Lock
は一度だけ取得することができます。解放されるまで、再び取得することはできません。(解放された後は、どのスレッドでも再取得が可能です)。
某
RLock
一方、同じスレッドから複数回取得することが可能です。 ロック解除するには、同じ回数だけ解除する必要があります。
もう一つの違いは、取得した
Lock
はどのスレッドからも解放されるのに対し、獲得した
RLock
は、それを取得したスレッドによってのみ解放される。
以下は、その理由を示す例です。
RLock
が有効な場合があります。あるとします。
def f():
g()
h()
def g():
h()
do_something1()
def h():
do_something2()
を全てとします。
f
,
g
および
h
は
パブリック
(すなわち、外部の呼び出し元から直接呼び出すことができる)、そして、それらすべては同期化を必要とします。
を使用すると
Lock
というようなことができます。
lock = Lock()
def f():
with lock:
_g()
_h()
def g():
with lock:
_g()
def _g():
_h()
do_something1()
def h():
with lock:
_h()
def _h():
do_something2()
基本的には
f
を呼び出すことはできません。
g
を呼び出す必要があります。
g
(すなわち
_g
). つまり、各関数の "synced" バージョンと "raw" バージョンが存在することになります。
を使用すると
RLock
がエレガントに解決します。
lock = RLock()
def f():
with lock:
g()
h()
def g():
with lock:
h()
do_something1()
def h():
with lock:
do_something2()
関連
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
Pythonショートビデオクローラーチュートリアル
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く