gpt4 book ai didi

c++ - 在 C++ 线程之间共享数据容器的最佳方式是什么

转载 作者:太空狗 更新时间:2023-10-29 19:47:39 26 4
gpt4 key购买 nike

我有一个应用程序有几个处理级别,例如:

InputStream->Pre-Processing->Computation->OutputStream

这些实体中的每一个都在单独的线程中运行。所以在我的代码中我有一个通用线程,它拥有

std::vector<ImageRead> m_readImages;

然后它将这个成员变量传递给每个线程:

InputStream input{&m_readImages};
std::thread threadStream{&InputStream::start, &InputStream};
PreProcess pre{&m_readImages};
std::thread preStream{&PreProcess::start, &PreProcess};
...

并且这些类中的每一个都拥有一个指向该数据的指针成员:

std::vector<ImageRead>* m_ptrReadImages;

我还定义了一个全局互斥量,我在对该共享容器的每次读/写操作时对其进行锁定和解锁。困扰我的是这种机制非常晦涩,有时我会混淆数据是否被另一个线程使用。

那么在这些线程之间共享这个容器的更直接的方法是什么?

最佳答案

您描述为“输入-->预处理-->计算-->输出”的过程在设计上是顺序的:每个步骤都依赖于前一个步骤,因此以这种特定方式进行并行化是无益的,因为每个线程都必须等待另一个完成。尝试找出哪个步骤花费最多时间并将其并行化。或者尝试设置多个并行处理管道,这些管道对独立的、单独的数据集进行顺序操作。一种常用的方法是使用一个处理队列,在一组线程中分配任务。

关于c++ - 在 C++ 线程之间共享数据容器的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50530619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com