gpt4 book ai didi

c++ - 基本 C++ 原子数组

转载 作者:可可西里 更新时间:2023-11-01 16:47:53 29 4
gpt4 key购买 nike

我正在尝试使用使用 C++11 原子的基本对象数组,即:

// Atomic array
std::atomic<Object*> *array = new std::atomic<Object*>[10];

// Storing old data
array[0].store(oldObject);

// Store the new data
Object *newObject = new Object();
while(!array[0].compare_exchange_strong(oldObject,newObject));

我的问题是,如果另一个线程正在修改同一索引处的数组,CAS 操作能否失败?或者,如果任何线程试图修改数组中的任何 位置,CAS 操作是否会失败?后者是我在测试期间似乎得到的行为。如果是这样,是否有更好的方法来声明一个数组,以便修改数组中不同的单个单元格不会相互影响?

谢谢。

最佳答案

单个缓存行上的 IIRC 原子变量将共享锁定(在 x86{,_64} 上)。

那么可以扩展数组并在每一端尝试变量来测试吗?

关于c++ - 基本 C++ 原子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21380205/

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