Является ли следующий код потокобезопасным:
РЕЗЬБА
std::vector<std::string> myCopy;
with_locked_mutex(m) {
myCopy = sharedCopy;
}
myCopy.clear() etc. // -- a
РЕЗЬБА B
while(1) {
// do things ...
with_locked_mutex(m) {
sharedCopy.push_back(a); // -- b
}
}
Другими словами, будет ли семантика COW std :: vector (и я думаю, что и std :: string также) создавать условие гонки между a и b? Если да, могу ли я что-то сделать, чтобы предотвратить это?