提问人:Urwald 提问时间:11/14/2023 更新时间:11/14/2023 访问量:91
当其他线程尝试读取时push_back向量 - 争用条件?[复制]
push_back to a vector while other threads try to read - race condition? [duplicate]
问:
我有一个函数,可以将元素添加到一个中,并在给定的线程中运行:std::vector
// called in one thread
void foo(std::vector<int>& v) {
// use v.push_back()
}
让其他线程使用基于范围的循环尝试读取是否安全?for
v
// called in other threads
void g(std::vector<int>& v) {
for(const auto& elem:v) {
// read only
}
}
在我看来,这可能是一个竞争条件,因为当其他线程尝试读取它时,大小可能会改变。这确实是不安全的代码吗?v
答:
0赞
Jesper Juhl
11/14/2023
#1
这是一个经典的争用条件。您需要一个锁(如 )来保护防止并发访问。std::mutex
vector
评论