unr*_*nal 3 c++ multithreading c++11
我有一个应用程序有几个处理级别,如:
InputStream->Pre-Processing->Computation->OutputStream
Run Code Online (Sandbox Code Playgroud)
每个实体都在单独的线程中运行.所以在我的代码中我有一般的线程,它拥有
std::vector<ImageRead> m_readImages;
Run Code Online (Sandbox Code Playgroud)
然后它将此成员变量传递给每个线程:
InputStream input{&m_readImages};
std::thread threadStream{&InputStream::start, &InputStream};
PreProcess pre{&m_readImages};
std::thread preStream{&PreProcess::start, &PreProcess};
...
Run Code Online (Sandbox Code Playgroud)
并且每个类都拥有此数据的指针成员:
std::vector<ImageRead>* m_ptrReadImages;
Run Code Online (Sandbox Code Playgroud)
我还定义了一个全局互斥锁,我在对该共享容器的每次读/写操作时锁定和解锁.困扰我的是这种机制非常模糊,有时我会混淆数据是否被另一个线程使用.
那么在这些线程之间共享这个容器的更直接的方法是什么?
您描述为"输入 - >预处理 - >计算 - >输出"的过程是按顺序设计的:每个步骤都依赖于前一个步骤,因此以这种特定方式并行化并不是有益的,因为每个线程只需要等待另一个去完成.试着找出哪个步骤需要花费大部分时间并将其并行化.或者尝试设置多个并行处理流水线,这些流水线按顺序在独立的单个数据集上运行.通常的方法是使用处理队列,该队列在一组线程中分配任务.
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |