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