0
我有多個線程和以下使用模式之間的資源共享:簡言之釋放鎖定在.NET
線程1所使用的受保護資源不斷。
線程2..N需要與受保護的資源不頻繁地交互並且持續很短的時間。
我想要線程1持有鎖保護資源不斷地在特定的時間在它的工作週期屈服於其他線程等待輪到他們。如果沒有其他線程正在等待,它應該立即重新獲得鎖並繼續其工作。
我想做到這一點的一種方式是這樣的:
lock (resource)
{
while (!stop)
{
resource.DoWorkIteration();
// give other threads a chance
Monitor.Exit(resource);
Thread.Sleep(0);
Monitor.Enter(resource);
}
}
但是睡眠(0),將屈服於任何準備運行的線程,而不是僅僅的那些等待這一特定的資源。
有沒有更好的方法來做到這一點,避免不必要的屈服?
如果在Exit()和Enter()之間拋出異常並且lock塊試圖釋放無主資源,會發生什麼? –