再入可能性とは、ロックが呼び出しごとではなくスレッドごとに取得されることを意味します。
固有のロックはスレッドによって保持されているので、スレッドが1回実行されると、呼び出しベースになることを意味しませんか?
私はロックを取得する場合、スレッドでは、:ありがとうございます、それがあることを意味らしいlockA
とき処理機能doA
どのコール機能doB
、およびdoB
また、ロックを必要としlockA
、その後、再入可能性があるウィル。Javaでは、この現象はスレッドごとに取得されるため、デッドロックを考慮する必要はありませんか?
再入可能性とは、ロックが呼び出しごとではなくスレッドごとに取得されることを意味します。
それは誤解を招く定義です。それは本当ですが、本当の意味はありません。
再入可能性とは、(一般的にはCS / IT用語で)何かを実行し、まだ実行している間にもう一度実行することを意味します。ロックの場合、それはあなたがシングルスレッドでこのようなことをすることを意味します:
再入可能ロック/ロックメカニズムを使用すると、同じロックを取得しようとすると成功し、ロックに属する内部カウンタが増加します。ロックは、ロックの現在の所有者が2回解放したときにのみ解放されます。
これは、プリミティブオブジェクトロック/モニターを使用したJavaの例です...
Object lock = new Object();
...
synchronized (lock) {
...
doSomething(lock, ...)
...
}
public void doSomething(Object lock, ...) {
synchronized (lock) {
...
}
}
再入可能の代替手段は非再入可能ロックです。この場合、スレッドがすでに保持しているロックを取得しようとすると、エラーになります。
再入可能ロックを使用する利点は、すでに保持しているロックを誤って取得したために失敗する可能性を心配する必要がないことです。欠点は、ロックが保護するように設計された変数の状態を変更しても何も変化しないとは想定できないことです。しかし、それは通常問題ではありません。ロックは通常、他のスレッドによって同時に発生する状態変更から保護するために使用されます。
だから私はデッドロックを考慮する必要はありませんか?
そうです。
スレッドはそれ自体に対してデッドロックしません(ロックが再入可能である場合)。ただし、ロックしようとしているオブジェクトをロックしている可能性のある他のスレッドがある場合は、デッドロックが発生する可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加