微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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;

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

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

解决方法

您描述为“输入 – >预处理 – >计算 – >输出”的过程是按顺序设计的:每个步骤都依赖于前一个步骤,因此以这种特定方式并行化并不是有益的,因为每个线程只需要等待另一个完成.试着找出哪个步骤需要花费大部分时间并将其并行化.或者尝试设置多个并行处理流水线,这些流水线按顺序在独立的单个数据集上运行.通常的方法是使用处理队列,该队列在一组线程中分配任务.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐