首頁  >  文章  >  後端開發  >  共享變數和線程.Lock

共享變數和線程.Lock

WBOY
WBOY轉載
2024-02-05 22:27:101044瀏覽

共享變數和線程.Lock

問題內容

在 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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除