gpt4 book ai didi

c++ - 原子地 std::vector::push_back() 并返回索引

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:48 24 4
gpt4 key购买 nike

我需要创建一个函数,将一个值附加到 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;
}

我想以原子方式执行此操作,以便返回的索引始终正确,即使可能有多个线程将值附加到 vector 。如果 push_back 返回刚刚添加的项目的索引,那会很容易。如何保证返回正确的索引?

最佳答案

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;
}

您需要以这种方式保护任何读/写操作。另一种方法是为 std::vector 创建包装器类,它将使用线程支持对其进行扩展。检查this询问详情。

关于c++ - 原子地 std::vector::push_back() 并返回索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com