我有一個問題..是確定的,如果我有這樣的事情:嘗試和鎖定問題
try
{
lock(programLock)
{
//some stuff 1
}
}
catch(Exception ex) { //stuff 2 }
我很好奇,如果"some stuff 1"
導致異常,確實programLock
仍然鎖定?
我有一個問題..是確定的,如果我有這樣的事情:嘗試和鎖定問題
try
{
lock(programLock)
{
//some stuff 1
}
}
catch(Exception ex) { //stuff 2 }
我很好奇,如果"some stuff 1"
導致異常,確實programLock
仍然鎖定?
不行,將被釋放的鎖,鎖是大致相同的:
try
{
Monitor.Enter(programLock);
// some stuff 1
}
finally
{
Monitor.Exit(programLock);
}
(這意味着如果一個異常被拋出,Monitor.Exit
將得到自動退出鎖定報表範圍的稱呼)
號離開鎖牙套總是會解鎖。
Lock()
不過
try
{
Monitor.Enter(...);
}
finally
{
Monitor.Exit(....);
}
所以它已經照顧它。
沒有,也不會保持鎖定狀態。
鎖的「閉括號」基本上Monitor.Exit的最後子句。
看到這個StackOverflow的相關問題。
Does a locked object stay locked if an exception occurs inside it?
「......鎖或爲SyncLock確保了 底層監控被釋放,即使 如果受保護的代碼引發 例外。」