Dot-Net
.NET 多執行緒 - 我是否需要同步對原始類型變數的訪問?
場景
我有一個帶有 bool
Enabled屬性的類,另一個執行緒上的循環使用它來查看它是否應該停止。這個想法是不同的執行緒可以將該屬性設置為 false 並停止另一個執行緒乾淨地執行。問題
Enabled我應該費心使用類似的東西來序列化對該屬性的訪問lock (lockObject) { ... },還是沒有它是否安全?
原始類型讀取是原子的,只要它們適合 CPU 讀取。因此,32 位原始類型讀取在 32 位 CPU 上是原子的,而 64 位類型讀取則不是。但是,除非它也是
volatile您的其他執行緒,否則由於記憶體可能看不到更改。
我認為您只需要將布爾變數標記為
volatile. 這將確保您希望停止執行的執行緒始終看到此佈爾值的最新值。