是否可以檢測到嘗試釋放鎖的同一個線程? 我們在代碼,看起來像很多地方:Monitor.TryEnter/Monitor.Exit和SynchronizationLockException
try
{
try
{
if(!Monitor.TryEnter(obj, 2000))
{
throw new Exception("can not lock");
}
}
finally
{
Monitor.Exit(obj);
}
}
catch
{
//Log
}
上面的代碼非常簡單,實際上進入和退出聲明中位於自定義對象(鎖管理器)。
問題是,在那個結構中,我們有SynchronizationLockException
在試圖「退出」時,因爲它看起來像鎖定不成功的線程,最後試圖釋放。
所以問題是,我如何知道是否使Monitor.Exit的線程是Monitor.Enter相同的線程?
我以爲我可以使用CurrentThread.Id來同步進入和退出,但我不確定它是否足夠「安全」。
既然你聲稱,實際上進入和退出聲明中分別位於自定義對象,我想知道你是否能在訪問'obj' outter塊? –
不,在外部塊中,我沒有引用對象,因爲鎖管理器接收到「key」作爲參數並創建它自己的鎖對象。你可以在我之前的問題中看到我的鎖管理器:http://stackoverflow.com/questions/14030491/net-multithreading-lock-object-with-log-when-locked-for-to-much-time –