std::atomic_bool flag{false};
int data{0};
void sendRequest()
{
// send request over network
}
bool replyReceived()
{
// return true when reply is received over the network, false otherwise
}
void threadA()
{
data = 123;
flag.store(true, std::memory_order_seq_cst); // (1)
sendRequest();
}
void threadB()
{
while (!replyReceived())
{
}
if (flag.load(std::memory_order_acquire)) // (2)
{
// processing on data (3)
}
}
在上面的列表中,threadA()
和threadB()
由不同的线程运行。 threadA()
发送网络请求,而threadB()
收到请求的回复。 flag
是一个原子变量,用于确保在(3)中观察到data
的新值。我的问题是应该(2)总是评估为真?即使(1)必须在(2)之前实时执行,它是否可能是假的?该平台是x86。