线程同时读/写

时间:2012-05-20 23:27:42

标签: c++ multithreading

如果我不关心Thread1是否同时更改Flag1 Thread2更改Flag1,除了逻辑错误还有什么可担心的吗?它是否会导致崩溃等:

  1. Thread1Thread2在同一时间阅读Flag1
  2. Thread1Flag1正在阅读Thread2的同时写信给Flag1
  3. 在这些示例中,Flag1bool

3 个答案:

答案 0 :(得分:7)

根据C ++ 11内存模型的规则:

  1. Thread1和Thread2在同一时间读取Flag1?这总是安全的。
  2. 在Thread2正在读取flag1的同时,Thread1正在写入Flag1?这是一场数据竞赛。
  3. 数据竞争是未定义的行为。虽然它不太可能在任何理智的硬件上崩溃,但它是未定义的行为,所以任何事情都可能发生。

答案 1 :(得分:2)

据我所知,2个线程无法在同一时间内访问同一个内存。

即使在并行计算上,这些假设也会由处理器自动处理。 http://en.wikipedia.org/wiki/Parallel_Random_Access_Machine

所以答案是没有崩溃。 你当然会遇到逻辑错误但是因为你不关心:p。

答案 2 :(得分:-1)

该标志应标记为volatile。这将确保您的编译器不会以不一致的方式优化读/写。

我相信对bool的读/写是原子的 - 所以如果你不关心访问顺序,我认为你不会有任何其他问题。