为什么我需要使用带信号量的锁

时间:2016-07-26 08:31:23

标签: c# locking semaphore

我想在使用信号量定义最大大小时创建队列。

Enque将添加项目和deque将删除项目

public void Enque(T item)
    {
        semaphore.WaitOne();
        privateQueue.Enqueue(item);

在谷歌搜索类似情况时,我发现有时会使用锁 像这样

semaphore.WaitOne();
lock(lock)
privateQueue.Enqueue(item);

为什么我们需要添加信号量锁? 感谢

1 个答案:

答案 0 :(得分:1)

如果你的信号量允许并发访问队列(允许最大计数> 1),那么必须以线程安全的方式进行排队和出队。

或者,您可以使用已经线程安全的队列,例如ConcurrentQueue<T>,然后您就不需要锁定 - 前提是锁仅保护排队本身。如果锁定的内容不止于此(您的问题中的代码段很难说),那么无论如何您都可能需要它。