同じスレッドがロックを解放しようとしているかどうかを検出することは可能ですか? コードには次のような場所がたくさんあります。
try
{
try
{
if(!Monitor.TryEnter(obj, 2000))
{
throw new Exception("can not lock");
}
}
finally
{
Monitor.Exit(obj);
}
}
catch
{
//Log
}
上記のコードは非常に単純化されており、実際にはカスタム オブジェクト (ロック マネージャー) にある Enter ステートメントと Exit ステートメントです。
問題は、その構造では、SynchronizationLockException
「終了」しようとすると、ロックに成功しないスレッドのように見えるため、最終的に解放しようとすることです。
問題は、Monitor.Exit を作成したスレッドが Monitor.Enter を作成したスレッドと同じかどうかをどのように知ることができるかということです。
CurrentThread.Id を使用して入力と終了を同期できると思いましたが、十分に「安全」かどうかはわかりません。