首页 > 解决方案 > 不同线程访问的共享容器

问题描述

我有一个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,我是否需要添加同步原语?

我是多线程的新手,所以如果我的问题看起来很愚蠢,请原谅我的英语,我很抱歉,我不是美国本地人。

标签: c++multithreading

解决方案


推荐阅读