c++ - 不同线程访问的共享容器
问题描述
我有一个concurrent_vector (ppl) 容器声明为一个全局变量,它代表两个函数/线程的入口。
我希望线程同时访问它(一个用于读取,一个用于写入/调整大小)。我的程序(在 C++ 中)包括一个检查容器是否为空的部分。由于一个线程显示缓冲区为空,而另一个不显示缓冲区为空,因此在我看来,两个线程都在两个不同的容器上运行,尽管我只定义了一个。
#include "stdafx.h"
#include "ppl.h"
concurrent_vector<dataElm> ResultImage;
int AcquireImages(CameraPtr pCam){
continue_recording = true;
pCam->BeginAcquisition();
int imageCnt = 0;
while (continue_recording == true)
{
ImagePtr _p = pCam->GetNextImage(1000);
imageCnt = imageCnt + 1;
dataElm obj = constructelm(_p, &loc, imageCnt - 1);
ResultImage.push_back(obj);
cout << "is buffer empty? " << ResultImage.empty() << endl;
}
//...
}
void Cam(){
//...
pCam->Init();
INodeMap& nodeMap = pCam->GetNodeMap();
result = result | AcquireImages(pCam);
pCam = nullptr;
//...
}
void saveImages() {
//...
cout << "ResultImage.empty() = " << ResultImage.empty() << endl;
if (ResultImage.empty() == false) {
//saving the image
}
else
{
Sleep(20);
}
}
int main(int, char**){
std::thread producer(Cam);
std::thread consumer1(saveImages);
producer.join();
consumer1.join();
return 0;
}
另外,即使我使用 concurrent_vector,我是否需要添加同步原语?
我是多线程的新手,所以如果我的问题看起来很愚蠢,请原谅我的英语,我很抱歉,我不是美国本地人。
解决方案
推荐阅读
- javascript - 我如何添加类名正文向下滚动反应?
- sql - 使用 SQL 并排显示父项和所有子项
- python - 如何自定义编码字符串
- scala - 在窗口数据帧上计算四分位数
- grammar - 使用 xtext 进行左递归
- javascript - 在反应中将事件侦听器附加到 componentDidUpdate
- python - 带有套接字的 Python TypeError
- php - PHP注销脚本不起作用
- ios - 如何计算 Swift 中给定 AVURLAsset 中音频/字幕轨道的数量?
- git - Git Braching/Merging 策略:release + hotfix 分支,master 的意义何在