Здравствуйте, saf_e, Вы писали:
_>все ОК
хочется изучить вопрос поглубже, собственно интересуют гарантии с точки зрения модели памяти, абстрактной машины из стандарта языка C++11, необходимые средства синхронизации
опишу частный пример более подробно:
std::map<int, std::string> globalMap; // global var
//run in thread1
void t1_func()
{
globalMap[1] = "1";
globalMap[2] = "12";
globalMap[3] = "123";
spawnThread(&t2_func);
}
//run in thread2
void t2_func()
{
auto it = globalMap.find(2);
assert(it != globalMap.end());
}
интересует какие правила регулируют то, что все модификации, произведенные в первом потоке будут видны во втором потоке в момент вызова find. вернет ли find globalMap.end() при каких-то условиях и следует ли как-то явно подсказывать компилятору о необходимости сбросить все модификации перед чтением