gpt4 book ai didi

c++ - C++线程安全 vector 插入

转载 作者:行者123 更新时间:2023-12-01 15:10:50 25 4
gpt4 key购买 nike

多线程处理数据,最后它们都将结果插入/追加到RESULT vector 中。
我想确保一次只有一个线程在RESULT vector 中插入元素。
为此,我使用了互斥锁和lock_guard(),但是它们有时会给出无效的访问错误,有时却不会。
这是我要同步的代码

void insert_output() {
mutex m;
lock_guard<mutex> lockGuard(m);
Resources::results.insert(Resources::results.begin(), output.begin(), output.end());
}

难道我做错了什么...
还有什么更好的方法来同步此过程?

最佳答案

vector 必须只有一个互斥量。因此,您应该在 vector 旁边添加互斥对象,例如作为results_mutex中的Resources。如果results是静态成员,则互斥对象也应该是静态成员(这样,该 vector 只有一个互斥对象)。

然后,您还必须在访问 vector 的所有操作上锁定互斥体,这些操作有可能与对insert_output的调用并行执行,而不仅仅是在插入操作上。

在当前代码中,您将在每次调用时创建一个新的互斥体,使其完全没有意义。

关于c++ - C++线程安全 vector 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60717010/

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