我想在使用信号量定义最大大小时创建队列。
Enque将添加项目和deque将删除项目
public void Enque(T item)
{
semaphore.WaitOne();
privateQueue.Enqueue(item);
在谷歌搜索类似情况时,我发现有时会使用锁 像这样
semaphore.WaitOne();
lock(lock)
privateQueue.Enqueue(item);
为什么我们需要添加信号量锁? 感谢
答案 0 :(得分:1)
如果你的信号量允许并发访问队列(允许最大计数> 1),那么必须以线程安全的方式进行排队和出队。
或者,您可以使用已经线程安全的队列,例如ConcurrentQueue<T>
,然后您就不需要锁定 - 前提是锁仅保护排队本身。如果锁定的内容不止于此(您的问题中的代码段很难说),那么无论如何您都可能需要它。