[英]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.