[英]Weird lock() behavior with foreach
所以,這不是我的代碼,並且已縮短以顯示行為,但它給出了非常意外的結果。
我在一個類和一個鎖中有兩個函數
object mylock = new object();
List<string> temp = new List<string>();
Func1(string)
{
lock(mylock)
{
temp.Add(string);
}
}
Func2()
{
lock(mylock)
{
temp.ForEach(p => Func1(p));
}
}
現在,我知道這沒有意義,但是當調用Func2時,不應該Func1死鎖嗎? 在我們的例子中,它執行。 謝謝。
lock
語句(封裝Monitor
類)支持在線程內重新進入(遞歸),即您可以嵌套使用相同監視器的調用。
其他鎖定方法:
Monitor
- 支持遞歸 ReaderWriterLock
- 支持遞歸,但速度很慢 ReaderWriterLockSlim
- 支持遞歸,但不鼓勵 EventHandle
( ManualResetEvent
, AutoResetEvent
, Mutex
, Semaphore
) - 不支持遞歸 .NET Monitor對象(鎖定使用)是遞歸的,因此持有鎖的線程可以自由地再次進入該鎖。
(並非所有鎖定構造都是遞歸的,並且可以針對遞歸支持進行參數化。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.