ロックを解除すると、SynchronizationLockException が発生します。
もちろん、私が最初にしたことは、問題に関する Google 検索でした。私は 2 つの主な誤ったパターンを見つけました。
- 作成されたスレッドとは異なるスレッドで Mutex を解放します。
- モニターの同期オブジェクトとして値タイプを使用する。または、モニターの開始と終了の間で同期オブジェクトを変更します。
問題は、これらのパターンがどれも私のケースに当てはまらないことです。
非常に単純な同期シナリオがあります。
public class MyClass : IDisposable
{
private readonly object _myLock = new object();
internal void Func1()
{
lock (_myLock)
{
//Some code here
}
}
internal void Func2()
{
lock (_myLock)
{
//Some code here
}
}
public void Dispose()
{
lock (_myLock)
{
//Some code here
} // Here is where I get an exception
}
}
最終的に、ロックが解除された場所SynchronizationLockException
の行を受け取ります。Dispose()
私の質問は、「私のコードの問題は何ですか」または「私が間違っていることは何ですか」ではありません。基本的に、ロックの.NET実装がこの例外をスローする可能性がある方法(およびどのような状況で)を知りたいです。
ありがとう。