Agn*_*ian 5 c++ multithreading stl vector
我需要创建一个函数,该函数将值附加到向量并返回刚刚追加的值的索引.
例:
int append(std::vector<int>& numbers, int number){
int retval = numbers.size();
// what if some other thread calls push_back(number) in between these calls?
numbers.push_back(number);
return retval;
}
Run Code Online (Sandbox Code Playgroud)
我想以原子方式执行此操作,以便返回的索引始终正确,即使可能有多个线程将值附加到向量.如果push_back返回刚刚添加的项目的索引,那将很容易.如何保证返回正确的索引?
Kir*_*sky 11
std::vector没有内置的线程支持.您可以使用boost::mutex它来扩展它:
int append(std::vector<int>& numbers, int number){
boost::mutex::scoped_lock slock( my_lock );
int retval = numbers.size();
numbers.push_back(number);
return retval;
}
Run Code Online (Sandbox Code Playgroud)
您需要以这种方式保护任何读/写操作.另一种方法是为它创建包装类,std::vector它将通过线程支持扩展它.查看此问题了解详情.
| 归档时间: |
|
| 查看次数: |
6096 次 |
| 最近记录: |