C ++ std :: threads交互虽然不应该

时间:2016-01-31 14:34:53

标签: c++ multithreading thread-safety stdthread

让我提前为这个问题如此模糊而道歉。我无法分享任何细节。这是一个计算机视觉问题,在main()中扫描和处理一堆图像。 main()函数每100(左右)帧产生另一个线程,它以不同的方式扫描图像(但第一步是需要的)。

#include <thread>
...

void myFunction(ImageVector, arg2, arg3)
{
    for (i = 0; i < ImageVector.size < ++i)
    {
        process(ImageVector[i])
    }
}

int main(void)
{

std::vector<std::string> images; // paths to the images, please consider it filled somehow, e.g. multiple push_backs



for (i = 0; i < Images.size ; ++i)
     {
         Scan(Images[i]). // Scans the image
         Process(Images[i]) // Processes the image

         if (Something)
         {
            std::vector<std::string> ImageVector(&Images[10], &Images[100]);

            //Spawn the tread and put it into a vector.
            MyThreads.push_back(std::thread(myFunction, ImageVector, arg2, arg3));
         }

     }

     MyThreads[0].join(); // assuming only the first one is filled

}

图像不相同并从磁盘读取。不过我检查了阅读逻辑,这不是问题。如果我一个接一个地执行任务,它可以正常工作。 ImageVector,arg2,arg3都不是指针。它们只是变量的副本。

函数myFunction(),Scan(),Process()使用类似的代码片段,但这些片段中没有一个具有共享变量。也没有malloc(),因为我被告知这不是线程安全,现在只是“新”。

我意识到继续下去并不多,但也许我只是忘记了一些简单的事情。

谢谢

PS:我将线程库切换到没有效果的提升,'。

1 个答案:

答案 0 :(得分:0)

如果一个程序没有线程而没有使用线程,那么可能的原因可能是同步。在这种特定情况下,由于问题描述和代码片段有限,访问ImageVector时可能会出现同步问题。