我有一個關於比賽條件和同時寫道的問題。比賽條件和解鎖寫
我有一個類,誰的對象是從不同的線程訪問。我想僅根據需要計算一些值並緩存結果。出於性能原因,我寧願不使用鎖(在任何人詢問之前 - 是的,在我的情況下是相關的)。
這構成了競爭條件。但是,這些對象是const的,不會被改變。所以如果不同的線程計算要緩存的值,它們在我的用例中保證是相同的。在不鎖定的情況下編寫這些值是否安全?或者,從更廣泛的角度來看,將不同鎖定的內容從不同線程寫入內存是否安全?
寫入的值是bool和double類型,有問題的架構可能是x86和ARM。
編輯:感謝大家的輸入。我終於決定找到一種不涉及緩存的方式。這種方法看起來很像'黑客',並且存在使用標誌變量的問題。
我懷疑C++會保證它,但至少在現代硬件上,很難想象會出現什麼問題。 – 2012-04-03 17:27:30
對原語的每個寫入操作都是原子操作,所以如果許多線程同時寫入相同的一組字段,它應該沒有區別。 – Alain 2012-04-03 17:28:22
「因此,如果不同的線程計算要緩存的值,它們在我的用例中保證是相同的」......這很奇怪。如果你能保證所寫的值是相同的,爲什麼要同時寫入它們?或者更好的是,爲什麼不止一次寫入它們? – 2012-04-03 17:36:58