mrw*_*ner 11 c++ multithreading stl c++03
我在这里阅读了很多帖子,问题是C++的标准容器(如"list"或"map"是线程安全的,所有人都说它不是一般的.并行读取应该没问题,但并行写入或者并行读写可能会导致问题.
现在我发现在www.cplusplus.com上,在大多数操作期间访问或修改列表是安全的.
一些例子:
访问容器(const和非const版本都不会修改容器).不访问映射值:同时访问或修改元素是安全的.
容器已修改.同时访问现有元素是安全的,尽管容器中的迭代范围不是.
我是否想念cplusplus.com或者我还有什么关于std容器中线程安全的知识.
提前致谢!
PS:我要的是C++ 03而不是C++ 11
Mik*_*our 12
并行读取应该没问题,但并行写入或并行读取和写入可能会导致问题.
那是对的.这是对C++中对象的非同步访问提供的一般保证.这些"问题"正式称为数据竞赛.
现在我发现在www.cplusplus.com上,在大多数操作期间访问或修改列表是安全的.
不,容器不提供并发读取的基本保证.如果一个线程访问它而另一个线程修改它,则会有数据竞争.但是,对于某些容器,有时可以安全地访问容器的元素,同时修改容器本身.
第一个例子是说,find不会不改变容器或接入元件值(仅键),因此是安全的,如果其他线程访问它,或修改,而无需修改容器本身(不同的)值.
第二个示例表示您可以安全地访问现有元素(使用该元素的引用或迭代器),因为插入元素不会干扰现有元素.
我要的是C++而不是C++ 11
目前,C++ 是 C++ 11.如果你问的是语言的历史版本,他们对线程没有什么可说的,所以问题一般不负责任,只针对特定的实现和线程框架.
| 归档时间: |
|
| 查看次数: |
2914 次 |
| 最近记录: |