0

基本上我有一个线程获得许可和许多其他线程释放许可。系统是这样获取线程休眠,直到其他线程促使他去工作。

像这样的东西

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

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

4

1 回答 1

2

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

于 2013-06-27T22:21:08.867 回答