【发布时间】:2018-10-02 17:20:15
【问题描述】:
根据输出的信息,谁能解释下面的代码?
(a==1 && a==2 && a==3) 怎么可能都是真的?
#include <iostream>
#include <thread>
int a = 0;
int main()
{
std::thread runThread([]() { while (true) { a = 1; a = 2; a = 3; }});
while (true)
{
if (a == 1 && a == 2 && a == 3)
{
std::cout << "Hell World!" << std::endl;
}
}
}
输出:
Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World! Hell World!
...
2019 年 1 月
我认为这个问题与这个链接高度相关 -> C++11 introduced a standardized memory model. What does it mean? And how is it going to affect C++ programming?
【问题讨论】:
-
“可能”是什么意思?程序做它做的事情。你到底期待什么?
-
通常是“Hello World!” :-)
-
@Tryer 你的意思是“地狱世界!”?
-
@pm100 这具有未定义的行为,因此它可能随时为
true。似乎它实际上可能发生在 OP 的案例中。 -
@FrançoisAndrieux 如果教授试图让学生体验有关比赛条件和未定义行为的经验,那么这是一个很好的例子。
标签: c++ multithreading c++11 stdthread