具有单独 reader 和编写器线程的单个队列是否需要锁定?

Does a single queue with separate reader and writer threads needs locking?

我有一个共享队列(使用单例队列包装器实现)和一个 reader 线程和一个编写器线程。当编写器线程将元素(入队)添加到队列时,我还有一种机制可以通知 reader 线程。 Reader 线程在收到通知时仅使一个元素出队。在这种情况下是否需要读写锁。

因为 writer 只是入队和 reader 出队我觉得不需要锁,如果 reader 在出队时检查队列大小。

我假设你的意思是 stl::queue 而 不是 stl 容器上的大多数操作都不是线程保存。有关异常的讨论,请参阅 C++11 STL containers and thread safety。假设开发人员将实施自己的检查,STL 更喜欢速度而不是安全性(例如数组索引的范围检查等)。

Since writer is only enqueing and reader dequeing I feel like there is no need for a lock, if reader checks the queue size when dequeing.

当队列被另一个线程修改时,单独操作已经是不安全的问题之一。在 C++ 中,对非原子共享变量的任何非同步访问(其中至少有一个是写入)都是数据竞争,因此是 UB。