gpt4 book ai didi

c++ - 使用 vector 作为多线程队列是否安全?

转载 作者:行者123 更新时间:2023-11-28 01:19:25 26 4
gpt4 key购买 nike

是否可以由多个线程写入 vector 而不用担心试图同时 push_back 一个值的线程之间的任何潜在竞争条件?底层硬件/操作系统将处理所有事情并确保程序不会崩溃或失败,对吗?

只是想尝试一个不使用锁互斥或原子的简单示例。

#include <iostream>
#include<thread>
#include<vector>

using namespace std;

std::vector<int> myvector;


void append(int value)
{
myvector.push_back(value);
}


int main()
{

int val1=1;
int val2=2;
int val3=3;

std::thread t1(append,val1);
std::thread t2(append,val2);
std::thread t3(append,val3);

t1.join();
t2.join();
t3.join();



for(int x=0; x<myvector.size(); ++x)
std::cout<<myvector[x]<<endl;


return 0;

}

多次运行程序会得到线程各种 push_back 组合的预期结果

最佳答案

std::vector 和 C++ 库中的任何容器都不是线程安全的。使用任何容器时,您都需要使用互斥锁和条件变量,以便在线程之间正确同步对容器的访问。

显示的代码是未定义的行为。反复改变线程的数量,和/或增加由同一线程插入 vector 的值的数量,和/或以其他方式向服务器加载其他处理负载,最终应该会导致崩溃或错误结果。

关于c++ - 使用 vector 作为多线程队列是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57226928/

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