使用多个SemaphoreSlim处理并发

时间:2016-10-19 12:26:56

标签: c# multithreading concurrency concurrentdictionary

在我的项目中,我有ConcurrentDictionary<int, SemaphoreSlim>。 我的应用程序查找已经通过键创建了SemaphoreSlim。如果它不存在 - 创建新的并将其放入字典。

在某些时候,我等待这个信号量,然后释放。 释放后,信号量应用程序应该决定从字典中删除这个信号量 - 或者只是因为已经有另一个步骤等待释放这个特定的信号量。 我使用这段代码:

semaphore.Release();
if(semaphore.CurrentCount == 0)
{
    Dicitionary.TryRemove(key, out semaphore);
}

在这里,我遇到了问题。在Release()信号量CurrentCount为0之后的某个时刻,但是当线程开始从字典中删除它时 - 另一个线程等待此信号量。

结果 - 信号量从字典中删除,不能发布(我使用字典作为存储)。

有人可以建议如何避免这种行为。

0 个答案:

没有答案