我总是被告知要将锁锁定在多个线程可以访问的变量上,我一直认为这是因为您想确保在使用之前写入的值不会发生变化 即螺纹为什么危险?
mutex.lock()
int a = sharedVar
a = someComplexOperation(a)
sharedVar = a
mutex.unlock()
而且这是有道理的,你会锁定。但在其他情况下,我不明白为什么我不能逃避不使用Mutexes。
线程A:
sharedVar = someFunction()
线程B:
localVar = sharedVar
什么可能出问题在这种情况下?特别是如果我不在乎线程B读取线程A分配的任何特定值。
我不是一个权威人士,但我猜测这是因为你最终可能会碰撞。如果您在写入时尝试访问变量,那么您可能会遇到访问冲突。 –
@ Pow-Ian内存访问始终是可串行化的。硬件负责以合理的方式处理这个问题。 –
问题是一个变量可能包含一个你不期待的值。当你只读时,这不是问题。当你开始写和使用变量时,你不能再根据变量的值做出正确的决定。 – dmaij