的問題是相當簡單的問: 如果我有是否性病::原子防止非原子變量的重新排序在原子變量
settings[N_STNGS];//used by many threads
std::atomic<size_t> current_settings(0);
void updateSettings()//called by single thread , always the same thread if that is important
{
auto new_settings = (current_settings+1)%N_STNGS;
settings[new_settings].loadFromFileSystem(); //line A
current_settings=new_settings; //line B
}
做標準保證線B線後不會重新排序? STNGS的用戶也總是會看到一致的(提交 - 在內存中的可見性可見)數據?
編輯:對於多個讀者線程和非平凡的設置,這是值得比較簡單的互斥麻煩?
即使不是這樣,這段代碼也完全破壞了。 ('current_settings'可以通過第一行和最後一行之間的其他線程改變。) – ybungalobill 2012-01-09 17:21:14
@DavidSchwartz:考慮char padding [padding_size];在struct的開頭和結尾。另外STNGS可以是指針數組,不會改變,只是指向東西... – NoSenseEtAl 2012-01-09 17:23:23
@NoSenseEtAl這是一個C++的問題或關於某個特定平臺的問題?如果這是一個C++問題,那麼就不能保證填充是你所需要的。如果這是一個特定於平臺的問題,答案將取決於平臺。 (你對'settings'的修改是永遠不會改變的。) – 2012-01-09 17:24:45