当前位置:  开发笔记 > 编程语言 > 正文

我是否需要在多线程环境中保护对STL容器的读访问权限?

如何解决《我是否需要在多线程环境中保护对STL容器的读访问权限?》经验,为你挑选了1个好方法。

我有一个std :: list <>容器和这些线程:

一个写作者线程无限地添加元素.

一个读取器/写入器线程,可在可用时读取和删除元素.

几个读取器线程访问容器的SIZE(通过使用size()方法)

有一个普通的互斥锁可以保护前两个线程对列表的访问.我的问题是,尺寸读取器线程是否也需要获取此互斥锁?我应该使用读/写互斥?

我在使用Visual C++ 6的Windows环境中.

更新:看起来答案尚不清楚.总结主要疑点:我是否仍然需要保护SIZE读取器线程,即使它们只调用size()(返回一个简单的变量),考虑到我不需要确切的值(即我可以假设一个+/- 1变化)?竞争条件如何使我的size()调用返回一个无效值(即一个完全无关的值)?

:通常,必须保护读卡器线程以避免竞争条件.不过,在我看来,上述更新中提出的一些问题尚未得到解答.

提前致谢!

谢谢大家的答案!



1> Michael Burr..:

是的,读线程需要某种互斥控制,否则写将改变它下面的东西.

读写器互斥量应该足够了.但严格来说,这是一个特定于问题的问题.即使在代码中只读的const对象中,实现也可能具有可变成员.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有