繁体   English   中英

如果线程在不相交的索引范围内读写,则std :: vector线程安全吗?

[英]Is a std::vector threadsafe if the threads read and write in disjoint index ranges?

假设我有一个长度为4的std::vector<int> ,它是恒定的。 然后有4个线程,其中线程i只能读写索引i 这是线程安全的吗? 单个元素可以相互独立更改吗? 我想知道,因为它们很近,因此可能一次将它们全部加载到缓存行中。

如果每个线程的索引范围大于1,是否会有所不同?

编辑:

我正在使用Visual Studio 2010,因此使用的是C ++ 03。 任何有关从C ++ 03到C ++ 11的差异的提示都欢迎!

是的,没关系。 不同的线程可以在不同范围的元素上运行。

根据C++11标准:

23.2.2容器数据竞赛[container.requirements.dataraces]

2尽管有(17.6.5.9),当同时修改了相同对象(除了vector <bool>)中不同元素中包含的对象的内容时,仍需要实现以避免数据争用。

编辑:从来没有提到C++11并发性和数据争用,因此规范没有考虑它们,也没有做出任何保证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM