使用c信号量获取所有许可

本文关键字:许可 获取 信号量 使用 | 更新日期: 2023-09-27 18:20:07

基本上,我有一个线程获得许可证,还有很多其他线程释放许可证。系统是这样的,获取线程睡眠,直到其他线程催促他去工作。

像这样的

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

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

使用c信号量获取所有许可

看起来您正在实现一个product-consummer模式。在.Net 4中,有一个类就是BlockingCollection。您可以从一个线程将对象放入其中,并在将对象添加到集合时在另一个线程中执行某些操作。