Dot-Net

.NET 多執行緒 - 我是否需要同步對原始類型變數的訪問?

  • August 11, 2009

場景

我有一個帶有 boolEnabled屬性的類,另一個執行緒上的循環使用它來查看它是否應該停止。這個想法是不同的執行緒可以將該屬性設置為 false 並停止另一個執行緒乾淨地執行。

問題

Enabled我應該費心使用類似的東西來序列化對該屬性的訪問lock (lockObject) { ... },還是沒有它是否安全?

原始類型讀取是原子的,只要它們適合 CPU 讀取。因此,32 位原始類型讀取在 32 位 CPU 上是原子的,而 64 位類型讀取則不是。但是,除非它也是volatile您的其他執行緒,否則由於記憶體可能看不到更改。

我認為您只需要將布爾變數標記為volatile. 這將確保您希望停止執行的執行緒始終看到此佈爾值的最新值。

引用自:https://stackoverflow.com/questions/1259494