在多线程中交换向量安全吗? [已关闭]

问题描述 投票:0回答:1

我目前正在研究多线程闭路电视系统。我创建一个变量

vector<cv::Mat> all_camera_frame
在主线程中。比我将元素传递给不同的线程。对于每个线程,它创建一个局部变量
cv::Mat frame
以从相机获取帧,而不是将帧复制到缓冲区。为了加快速度,我使用
std::swap(all_camera_frame[0], frame);
而不是
 all_camera_frame[0] = frames.clone();
。它可以工作,但我想知道它是否安全?我检查了swap函数发现它交换了元素指针和mata数据,但是一个在堆上一个在堆栈上,如果线程结束会发生什么?是否会导致分段错误,因为主线程元素现在是由线程创建但已经被销毁的东西?

我是 C++ 新手,确实需要一些帮助。

c++ multithreading swap
1个回答
0
投票

在多线程中交换向量安全吗?

不。一点也不安全。

std::swap
不是原子操作。

在多线程环境中使用它需要某种形式的同步(例如使用

std::mutex
)。

否则你会遇到竞争条件,导致 UB(未定义的行为)。
这意味着任何事情都可能发生,包括(但不一定)分段错误。
该程序甚至可能看起来工作正常,但你不能依赖它。

© www.soinside.com 2019 - 2024. All rights reserved.