我有一个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