我知道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的原因。另外,假设没有内存分配,可以处理半旧元素和半新元素。
答案 0 :(得分:0)
如果旧记忆不需要免费,chrome://gpu/
就像这样工作
std::atomic<int*>