让我提前为这个问题如此模糊而道歉。我无法分享任何细节。这是一个计算机视觉问题,在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:我将线程库切换到没有效果的提升,'。
答案 0 :(得分:0)
如果一个程序没有线程而没有使用线程,那么可能的原因可能是同步。在这种特定情况下,由于问题描述和代码片段有限,访问ImageVector时可能会出现同步问题。