的问题是相当简单的问: 如果我有是否性病::原子防止非原子变量的重新排序在原子变量
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