【发布时间】:2012-12-13 21:05:31
【问题描述】:
我一直被告知要对多个线程将访问的变量加锁,我一直认为这是因为你想确保你正在使用的值在写回之前不会改变 即
mutex.lock()
int a = sharedVar
a = someComplexOperation(a)
sharedVar = a
mutex.unlock()
你会锁定它是有道理的。但在其他情况下,我不明白为什么我不能不使用互斥锁。
线程 A:
sharedVar = someFunction()
线程 B:
localVar = sharedVar
在这种情况下可能出现什么问题?特别是如果我不在乎线程 B 读取线程 A 分配的任何特定值。
【问题讨论】:
-
我不是权威,但我猜这是因为你最终可能会发生冲突。如果您在写入变量的同时尝试访问变量,那么您可能会遇到访问冲突。
-
@Pow-Ian 内存访问始终是可序列化的。硬件负责以合理的方式处理此问题。
-
问题是变量可能包含您不期望的值。当您只是阅读时,这不是问题。当您开始编写和使用变量时,您无法再根据变量的值做出正确的决定。
-
@Jan Dvorak 谢谢,很高兴知道。
-
你会想了解撕裂和顺序一致性。
标签: multithreading