我有一个std :: list <>容器和这些线程:
一个写作者线程无限地添加元素.
一个读取器/写入器线程,可在可用时读取和删除元素.
几个读取器线程访问容器的SIZE(通过使用size()方法)
有一个普通的互斥锁可以保护前两个线程对列表的访问.我的问题是,尺寸读取器线程是否也需要获取此互斥锁?我应该使用读/写互斥?
我在使用Visual C++ 6的Windows环境中.
更新:看起来答案尚不清楚.总结主要疑点:我是否仍然需要保护SIZE读取器线程,即使它们只调用size()(返回一个简单的变量),考虑到我不需要确切的值(即我可以假设一个+/- 1变化)?竞争条件如何使我的size()调用返回一个无效值(即一个完全无关的值)?
答:通常,必须保护读卡器线程以避免竞争条件.不过,在我看来,上述更新中提出的一些问题尚未得到解答.
提前致谢!
谢谢大家的答案!
是的,读线程需要某种互斥控制,否则写将改变它下面的东西.
读写器互斥量应该足够了.但严格来说,这是一个特定于问题的问题.即使在代码中只读的const对象中,实现也可能具有可变成员.