我有一个 std::list<> 容器和这些线程:
一个无限期添加元素的作家线程。
一个读取器/写入器线程,在可用时读取和删除元素。
访问容器大小的几个读取器线程(通过使用 size() 方法)
有一个普通的互斥锁可以保护前两个线程对列表的访问。我的问题是,大小读取器线程是否也需要获取此互斥锁?我应该使用读/写互斥锁吗?
我在使用 Visual C++ 6 的 Windows 环境中。
更新:看起来答案还不清楚。总结主要疑问:考虑到我不需要确切的值(即我可以假设一个+/- 1 个变化)?竞争条件如何使我的 size() 调用返回无效值(即与好的值完全无关的值)?
回答: 通常,必须保护读者线程以避免竞争条件。尽管如此,在我看来,上述更新中提到的一些问题还没有得到解答。
提前致谢!
谢谢大家的答案!