gpt4 book ai didi

c++ - 写同步读成功

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

如果程序中的一个线程试图从一个变量中读取而另一个线程向它写入,那么读取的值当然是未定义的。但是,假设只有一个写入者,是否保证写入成功?例如:

bool myGlobalVariable = false;
void thread1() {
myGlobalVariable = true;
}
void thread2() {
bool x = myGlobalVariable; //x is undefined
}

在这种情况下,一旦两个线程都完成,myGlobalVariable 是否保证为 true

我特别想知道 Linux 上的 gcc,但我很想知道其他操作系统和编译器的作用,或者 ARM 的行为是否与 x86 不同。

最佳答案

在实践中,没有什么可能会失败。但是,C++11/14 标准在这方面非常明确。这是 C++14 草案部分 [intro.multithread]/23 的引述(强调我的):

The execution of a program contains a data race if it contains two potentially concurrent conflicting actions, at least one of which is not atomic, and neither happens before the other, except for the special case for signal handlers described below. Any such data race results in undefined behavior.

[intro.multithread]/6 中定义了冲突的操作:

Two expression evaluations conflict if one of them modifies a memory location (1.7) and the other one accesses or modifies the same memory location.

关于c++ - 写同步读成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429310/

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