加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:14:49 所属栏目:百科 来源:网络整理
导读:我有一个应用程序有几个处理级别,如: InputStream-Pre-Processing-Computation-OutputStream 每个实体都在单独的线程中运行. 所以在我的代码中我有一般的线程,它拥有 std::vectorImageRead m_readImages; 然后它将此成员变量传递给每个线程: InputStream i
我有一个应用程序有几个处理级别,如:

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;

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

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读