私はEmbarcaderoのクリティカルセクションの実装TCriticalSection、を使用していますが、そのドキュメントは私の質問に答えていません。私たちはグローバルクリティカルセクションオブジェクトがある場合スレッドがクリティカルセクションでAcquire()を呼び出すと、異なるスレッドがRelease()を呼び出すと、そのロックは解放されますか?
は:
namespace
{
//delphi style class must be constructed on the heap
TCriticalSection* criticalSection = new TCriticalSection();
}
//somewhere in thread 1...
criticalSection->Acquire();
//somewhere in thread2...
criticalSection->Release();
をスレッド2でリリース呼び出しがクリティカルセクションを開くのだろうか?
破壊中にロックを解除するRAIIクラスがあるため、コードが例外をスローするとデッドロックには入らないため、私は質問します。ただし、クリティカルセクションはメソッドの一部に過ぎません。
//...
CRITICAL_SECTION_LOCK lock(criticalSection);
OneAtATimePlease();
lock.Release();
//...
その後、我々は、コードでそのメソッドへのすべての単一の呼び出しのためにロックを処理することがありますので、だから私は)OneAtATimePlease(内部のクリティカルセクションを配置する必要はありません。
明確で詳細な回答をありがとう! –