gpt4 book ai didi

c - 只有一个线程使用 memory_order_seq_cst 有用吗?

转载 作者:行者123 更新时间:2023-12-05 03:23:45 25 4
gpt4 key购买 nike

在多线程程序中,如果只有一个线程使用它,您是否从 memory_order_seq_cst 得到任何保证,即您不会从较弱的顺序中得到保证?示例:

#include <stdatomic.h>

extern atomic_int x, y;

void doSomething(void);

void thread1(void) {
atomic_store_explicit(&x, 1, memory_order_seq_cst);
atomic_thread_fence(memory_order_seq_cst);
if(atomic_load_explicit(&y, memory_order_seq_cst)) {
doSomething();
}
}

void thread2(void) {
atomic_store_explicit(&y, 1, memory_order_release);
atomic_thread_fence(memory_order_acq_rel);
if(atomic_load_explicit(&x, memory_order_acquire)) {
doSomething();
}
}

如果 thread1thread2 并行运行,是否保证恰好一个总是调用 doSomething

最佳答案

我相信不会,如果只有一个线程使用它,它不会提供任何额外的保证。

seq-cst 和 acqure/release 之间的唯一区别是存在全局 seq-cst 操作顺序。

如果不执行 seq-cst 操作,其他线程将无法观察或影响此顺序。这条订单因此copies the "sequenced-before"使用 seq-cst 操作的单个线程的顺序,因为没有其他限制它。

关于c - 只有一个线程使用 memory_order_seq_cst 有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72439784/

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