gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:38:57 25 4
gpt4 key购买 nike

假设,我有一个 std::vector<int>长度为 4,它是常数。然后是4个线程,其中线程i只读和写索引 i .这是线程安全的吗?单个元素可以相互独立地改变吗?我想知道,因为它们很接近,所以它们可能会同时加载到高速缓存行中。

如果每个线程的索引范围大于 1,会有什么不同吗?

编辑:

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

最佳答案

是的,没关系。不同的线程可以对不同范围的元素进行操作。

根据C++11标准:

23.2.2 Container data races [container.requirements.dataraces]

2 Notwithstanding (17.6.5.9), implementations are required to avoid data races when the contents of the contained object in different elements in the same sequence, excepting vector<bool>, are modified concurrently.

编辑:在 C++11 之前从未提及并发和数据竞争,因此规范没有考虑它们,也没有做出任何保证。

关于c++ - 如果线程在不相交的索引范围内读写,std::vector 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39163532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com