如果我不在乎变化是否Thread1
同时Flag1
变化Thread2
,Flag1
除了逻辑错误还有什么需要担心的吗?如果出现以下情况,是否会导致崩溃等:
Thread1
并同时Thread2
阅读Flag1
?Thread1
是在读Flag1
的同时写吗?Thread2
Flag1
在这些示例中,Flag1
是bool
.
如果我不在乎变化是否Thread1
同时Flag1
变化Thread2
,Flag1
除了逻辑错误还有什么需要担心的吗?如果出现以下情况,是否会导致崩溃等:
Thread1
并同时Thread2
阅读Flag1
?Thread1
是在读Flag1
的同时写吗?Thread2
Flag1
在这些示例中,Flag1
是bool
.
根据C++11内存模型的规则:
数据竞争是未定义的行为。虽然它不太可能在任何健全的硬件上崩溃,但它是未定义的行为,所以任何事情都可能发生。
据我所知,2个线程不能在完全相同的时间访问相同的内存。
即使在并行计算中,这些假设也会由处理器自动处理。 http://en.wikipedia.org/wiki/Parallel_Random_Access_Machine
所以答案是没有崩溃。您当然会遇到逻辑错误,但因为您不在乎:p。
该标志应标记为volatile
。这将确保您的编译器不会以不一致的方式优化读/写。
我相信对 bool 的读/写是原子的——所以如果你不关心访问顺序,我认为你不会有任何其他问题。