在c中线程之间共享数据容器的最佳方法是什么

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

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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...