是對下面的代碼線程安全:C++的標準::矢量和線程安全
螺紋的
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語義:: vector(以及std :: string也是這樣,我想)在a和b之間創建競爭條件?如果是這樣,我能做些什麼來阻止它?
誰告訴你'vector'有COW語義? (另外,它更像是「以COW實現」,因爲這不是語義的一部分。) – 2012-03-17 09:48:14