我有一个共享队列(使用单例队列包装器实现)以及一个读取器线程和一个写入器线程。当写入线程将元素(入队)添加到队列时,我还有一种机制可以通知读取线程。阅读器线程在收到通知时仅将一个元素出列。在这种情况下是否需要读写锁。
由于作家只是入队和读者出队,我觉得不需要锁,如果读者在出队时检查队列大小。
我有一个共享队列(使用单例队列包装器实现)以及一个读取器线程和一个写入器线程。当写入线程将元素(入队)添加到队列时,我还有一种机制可以通知读取线程。阅读器线程在收到通知时仅将一个元素出列。在这种情况下是否需要读写锁。
由于作家只是入队和读者出队,我觉得不需要锁,如果读者在出队时检查队列大小。
由于作家只是入队和读者出队,我觉得不需要锁,如果读者在出队时检查队列大小。
在其他问题中,当队列被另一个线程修改时,单独的操作已经不安全。在 c++ 中,对非原子共享变量(其中至少有一个是写入)的任何非同步访问都是数据竞争,因此是 UB。
我假设您的意思是 stl::queue 并且stl 容器上的大多数操作都不是线程保存。有关异常的讨论,请参阅C++11 STL 容器和线程安全。STL 更喜欢速度而不是安全性(例如数组索引的范围检查等),假设开发人员将实现他们自己的检查。