Re[2]: multithreading : visibility control
От: uzhas Ниоткуда  
Дата: 30.05.13 12:03
Оценка:
Здравствуйте, 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() при каких-то условиях и следует ли как-то явно подсказывать компилятору о необходимости сбросить все модификации перед чтением
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.