获得c#semaphore的所有许可

时间:2013-06-27 22:07:29

标签: c# multithreading semaphore

基本上我有一个获取许可的线程和许多其他发布许可的线程。系统是如此获取线程休眠,直到其他线程促使他去上班。

像这样的东西

function work(){
    while(true){
        this.semaphore.waitOne();
        doALotOfStuff();
    }
}
function prod(){
    this.semaphore.release();
}

问题是,当我prod()太多时,我得到一个SemaphoreFullException。我可以将最大信号量设置为一些非常高的数字,但我不喜欢这个想法,我希望它能做this.semaphore.acquire(this.semaphore.numberOfPermits)

1 个答案:

答案 0 :(得分:2)

看起来你正在实施一个产品消费模式。在.Net 4中有一个专门用于此类的课程 - BlockingCollection。您可以从一个线程将对象放入其中,并在将其添加到集合时在另一个线程中执行某些操作。

相关问题