我有一個Visual Studio 2008 C#.NET 3.5項目,其中一個類監聽來自另一個多線程類的事件調用。我需要確保我的事件只允許同時訪問最多10個線程。第11個線程應該阻塞,直到10個完成之一。一個函數,只允許N個併發線程
myobj.SomeEvent += OnSomeEvent;
private void OnSomeEvent(object sender, MyEventArgs args)
{
// allow up to 10 threads simultaneous access. Block the 11th thread.
using (SomeThreadLock lock = new SomeThreadLock(10))
{
DoUsefulThings(args.foo);
}
}
我沒有在其他MyObj
類的控制,所以我不能實現一個線程池那裏。
實現此目的的最佳方法是什麼?
感謝, PaulH
+1注意你應該在try/catch的'finally'塊中退出信號量。這是重要的東西 - 萬一你的代碼拋出一個異常,你想確保信號退出。 – 2012-04-16 15:36:04