2012-12-06 34 views
1

我試圖同時訪問某些資源,所以我使用的是lock如何脈衝等待列表中的最後一個線程?

object lockObject = new object(); 
lock(lockObject) 
{ 
    //Acquire some resources and do some operations 
} 
//Pulse only the most recently joined thread in waiting list 

但我要的是簡單的脈衝只有最後一個線程(大多數剛加入的線程在等待名單),而忽略其他線程(死鎖,中止或飢餓這裏是不關心)。 我能想到的一個選擇是使用消息隊列,並忽略除了處理最後一個消息之外的所有消息。除此之外,我怎樣才能簡單地觸發最後一個線程並忽略其他線程?

+0

發佈您的代碼.... –

回答

1

有很多方法可以實現這一點。這是一種方法。

您將有一個'線程管理器',每個線程將調用'等待'資源。

該主題管理員將基本上管理WaitHandlesStack。 當一個線程調用管理器時,它會創建一個新的WaitHandle,並將它推送到堆棧,然後將該實例提供給它可以等待的線程。

當你的代碼想讓最後一個等待線程到pulse時,它會彈出堆棧中最頂部的等待句柄,並且它會彈出signal它。

(請注意,這種架構依賴於調用線程在等待在WaitHandle的。)

HTH