为什么我需要将锁与信号量一起使用
本文关键字:信号量 一起 为什么 | 更新日期: 2023-09-27 17:58:40
我想在用信号量定义最大大小的同时创建Queue。
Enque将添加项目,deque将删除项目
public void Enque(T item)
{
semaphore.WaitOne();
privateQueue.Enqueue(item);
在谷歌上搜索类似的情况时,我发现有时会使用锁像这个
semaphore.WaitOne();
lock(lock)
privateQueue.Enqueue(item);
为什么我们需要用信号量添加锁?感谢
如果您的信号量允许并发访问队列(通过允许最大计数>1),那么入队和出队必须以线程安全的方式进行。
或者,您可以使用一个已经是线程安全的队列,如ConcurrentQueue<T>
,然后您就不需要锁了——只要锁只保护队列本身。如果锁包含的内容不止于此(从问题中的代码片段中很难说),那么您可能无论如何都需要它。