基本上我有一个获取许可的线程和许多其他发布许可的线程。系统是如此获取线程休眠,直到其他线程促使他去上班。
像这样的东西
function work(){
while(true){
this.semaphore.waitOne();
doALotOfStuff();
}
}
function prod(){
this.semaphore.release();
}
问题是,当我prod()太多时,我得到一个SemaphoreFullException。我可以将最大信号量设置为一些非常高的数字,但我不喜欢这个想法,我希望它能做this.semaphore.acquire(this.semaphore.numberOfPermits)
答案 0 :(得分:2)
看起来你正在实施一个产品消费模式。在.Net 4中有一个专门用于此类的课程 - BlockingCollection。您可以从一个线程将对象放入其中,并在将其添加到集合时在另一个线程中执行某些操作。