|
|
1
2
其简单之处在于:如果多个线程可以同时访问一个对象而无需同步,并且其中至少有一个线程正在向该对象写入数据,则该程序会发生数据竞争。具有数据竞争的程序的行为是未定义的。 您可以通过防止与互斥对象同时访问,或者在许多情况下,通过使用原子对象来提供同步。 如果不正确地同步读写操作,您可以享受流行的室内游戏“猜猜这个程序可能做什么”。有很多消息线程可以解释为什么在某些情况下数据竞争是正常的。如果你真的不在乎你的程序是否能正常工作,那就没问题了。如果你真的在乎,同步。 |
|
2
0
很难说不知道什么会构成 对的 你的特殊情况下的程序。但事实上,只要只有一个并发的writer,就不必担心会损坏内存。
不过,多个读卡器将在不锁定的情况下获得不确定的值。你肯定想用
atomic loads (seq_cst, most likely) and stores
对于这个值,您可能需要查看
|
|
|
3
0
您需要提供更多的上下文,但是一般来说,您应该使用类似于 std::mutex 是的。如果您不关心某个线程是否读取了错误的值,那么您可以放宽需求,但这一切都取决于您的用例。 您可以将问题中的“多个读卡器”简化并替换为“单个读卡器”,答案仍然是:您必须保护来自不同线程对共享变量的访问,否则读卡器线程可能不会“观察”由写卡器线程所做的更改,而实际上最终会读取并使用错误的值。 如果您试图从线程中读取/修改的是一个简单整数,则可以使用 std::atomic 是的。 |
|
|
deen · 从递归方法调用另一个类的方法:Java 8 年前 |
|
|
nd97 · 读取Bash中可能删除的文件 8 年前 |
|
|
je123 · $.post()可能的竞争条件;重定向问题 8 年前 |
|
|
zackster7171 · C程序在GDB中工作,但不正常 8 年前 |
|
|
Di Wang · 单处理器环境可以防止竞争条件吗? 8 年前 |
|
|
yun · USB音频缓冲区欠载 8 年前 |