在 Java 中,除非您使用原子操作或其他執行緒同步機制,否則執行緒中的共享變數的值可能會停滯。
給定 CPython 中的 GIL。我看到了 Lock inc 的價值,其中:
即使在令人困惑的 a = 1
習慣用法中,在賦值之前也要執行多個步驟。為了防止競爭狀況。
但是在像 a = 1
這樣的情況下,沒有鎖。在某個執行緒更新 a 後,是否可以讓執行緒 A 和 B 讀取不同的 a 值?
問這個問題的另一種方式是,Lock 是否可以確保共享值傳播,而缺少 Lock 則不能?
問題不在於 a = 1
。如果您在整個程式碼中所做的唯一一件事是將 a
設定為各種值,那麼您不需要鎖定。
但是,如果您在設定 a = 1
的同時,程式碼中的其他地方正在執行 a = a 1
,那麼您需要鎖定它們。您鎖定了 a = 1
,這樣如果其他人遞增 a
,它將完全在您設定 a
之前或之後發生。
因此在幾乎所有情況下,除非您真的知道自己在做什麼,否則鎖是最簡單的解決方案。
以上是共享變數和線程.Lock的詳細內容。更多資訊請關注PHP中文網其他相關文章!