我總是被告知要將鎖鎖定在多個線程可以訪問的變量上,我一直認爲這是因爲您想確保在使用之前寫入的值不會發生變化 即螺紋爲什麼危險?
mutex.lock()
int a = sharedVar
a = someComplexOperation(a)
sharedVar = a
mutex.unlock()
而且這是有道理的,你會鎖定。但在其他情況下,我不明白爲什麼我不能逃避不使用Mutexes。
線程A:
sharedVar = someFunction()
線程B:
localVar = sharedVar
什麼可能出問題在這種情況下?特別是如果我不在乎線程B讀取線程A分配的任何特定值。
我不是一個權威人士,但我猜測這是因爲你最終可能會碰撞。如果您在寫入時嘗試訪問變量,那麼您可能會遇到訪問衝突。 –
@ Pow-Ian內存訪問始終是可串行化的。硬件負責以合理的方式處理這個問題。 –
問題是一個變量可能包含一個你不期待的值。當你只讀時,這不是問題。當你開始寫和使用變量時,你不能再根據變量的值做出正確的決定。 – dmaij