gpt4 book ai didi

c++ - 使用 memory_order_relaxed 如何在典型架构上保证原子变量的总修改顺序?

转载 作者:行者123 更新时间:2023-11-30 02:13:49 24 4
gpt4 key购买 nike

据我所知,memory_order_relaxed 是为了避免昂贵的内存栅栏,这可能需要在特定架构上进行更多约束排序。在那种情况下,如何在流行的处理器上实现原子变量的总修改顺序?

编辑:

atomic<int> a;

void thread_proc()
{
int b = a.load(memory_order_relaxed);
int c = a.load(memory_order_relaxed);
printf(“first value %d, second value %d\n, b, c);
}

int main()
{

thread t1(thread_proc);
thread t2(thread_proc);
a.store(1, memory_order_relaxed);
a.store(2, memory_order_relaxed);
t1.join();
t2.join();
}

什么能保证输出不会是:

first value 1, second value 2
first value 2, second value 1

?

最佳答案

多处理器经常使用MESI protocol以确保某个地点的总商店订单。信息以高速缓存行粒度传输。该协议(protocol)确保在处理器修改高速缓存行的内容之前,所有其他处理器放弃他们的行拷贝,并且必须重新加载修改后的行的拷贝。因此,在处理器将 x 然后 y 写入同一位置的示例中,如果任何处理器看到 x 的写入,它必须从修改后的行重新加载,并且必须在写入者写入 y 之前再次放弃该行。

关于c++ - 使用 memory_order_relaxed 如何在典型架构上保证原子变量的总修改顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58827774/

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