使用std :: atomic

时间:2017-01-16 18:19:39

标签: multithreading c++11 atomic

我知道mutex同步是如何工作的,但我在确定如何通过简化案例进行同步时遇到了问题:

我们有一个包含10个元素的数组。

Thread 1以只读方式访问数组 - 读取元素。例如像这样的东西:

// const int *my_array;
int something = my_array[5];

Thread 2执行不相关的操作,但有时可能会决定一次更新所有10个元素。例如类似的东西:

// const int *my_array;
const int *my_temp_array = load_new_data();
// suppose pointer memory are correct.
// because it is pointers, the following operation is instant
my_array = my_temp_array;

两个线程都需要使用原始的std::unique_lock

但是有没有办法用std::atomic来完成?

注意:
正如伊戈尔所说:

  

如果线程1在数组上循环,则线程2在中间翻转它   循环 - 可以处理半个旧元素和一半新元素吗?   谁为阵列分配内存,以及何时以及由谁分配内存   解除分配的?

示例过于简单,我只对一般的线程同步感兴趣。这就是元素数量固定为10的原因。另外,假设没有内存分配,可以处理半旧元素和半新元素。

1 个答案:

答案 0 :(得分:0)

如果旧记忆不需要免费,chrome://gpu/就像这样工作

std::atomic<int*>