【发布时间】:2025-11-30 10:30:01
【问题描述】:
以下代码线程安全吗:
线程 A
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
}
}
换句话说,std::vector 的 COW 语义(我认为 std::string 的 COW 语义)会在 a 和 b 之间创建竞争条件吗?如果是这样,我可以做些什么来防止它?
【问题讨论】:
-
谁告诉你
vector有COW 语义? (此外,它更像是“实现为 COW”,因为这不是语义的一部分。)
标签: c++ multithreading stl