【发布时间】:2012-05-20 23:27:41
【问题描述】:
如果我不在乎Thread1是否同时Flag1更改Thread2更改Flag1,除了逻辑错误还有什么需要担心的吗?如果出现以下情况,是否会导致崩溃等:
-
Thread1和Thread2是否同时读取Flag1? -
Thread1正在写入Flag1,同时Thread2正在读取Flag1?
在这些示例中,Flag1 是 bool。
【问题讨论】:
-
您可能需要仔细考虑“完全相同的时间”的真正含义以及这些操作如何在数字设备上发生。
-
除非标志是对象的属性,否则它们本身都不会发生崩溃,可能不会被实例化。但是您可能会错过状态更改,或者在两个线程中检测到相同的更改。所以会发生什么取决于状态的变化。使其线程安全比试图应对它不安全的后果要容易得多
-
"除了逻辑错误" 既然你不关心程序逻辑,为什么还要费心呢?一个更简单的程序是“hello world”。它可能不会做你想做的事情,但是当你不关心逻辑错误时......
-
值得提醒的是,虽然你不能同时读写一个
bool变量,但是你可以同时读写一个“数据结构”,就像读vector[0]一样写信给vector[1]就可以了。关键是你不能同时读取和写入原子数据类型。
标签: c++ multithreading