一直有人告诉我在多个线程将访问的变量周围设置锁,我一直认为这是因为您要确保在写回该变量之前,所使用的值没有改变
IE。

mutex.lock()
int a = sharedVar
a = someComplexOperation(a)
sharedVar = a
mutex.unlock()

这很有意义,您可以锁定它。但是在其他情况下,我不明白为什么不使用互斥体无法摆脱困境。

线程A:
sharedVar = someFunction()

线程B:
localVar = sharedVar

在这种情况下可能会出什么问题?特别是如果我不在乎线程B会读取线程A分配的任何特定值。

最佳答案

这很大程度上取决于sharedVar的类型,您使用的语言,任何框架和平台。在许多情况下,将单个值分配给sharedVar可能会花费一条以上的指令,在这种情况下,您可能会读取该值的“半集”副本。

即使不是这种情况,并且分配是原子的,但如果没有memory barrier,您也可能看不到最新值。

10-04 12:34