需要关于pthread同步的建议/建议(结合条件变量和障碍的使用)

时间:2013-01-09 09:43:01

标签: pthreads condition-variable synchronisation barrier

我有以下情况:

我将一个任务分成几个阶段,每个阶段有几个线程来完成实际工作,后期的线程需要等待当前阶段的所有线程完成。

例如:

线程1,2,3正在执行第一步中的工作

线程4,5,6正在完成第二步的工作

线程7,8,9正在执行第三步 ...

每个步骤中的线程都是独立的,但是他们需要等待上一步中的线程完成。

以下是我想要实现的目标:

  1. 在当前步骤的每个线程中,等待表示如果可以启动当前步骤的条件
  2. 一旦当前步骤可以启动,所有线程都开始执行工作,并在此步骤中等待所有线程的屏障完成
  3. 在此步骤中的所有线程完成后,在下一步线程正在等待的条件变量上进行广播
  4. 是否有意义?这里有什么明显的错吗?

    我被多线程程序的高级语言结构所破坏,使用pthread API对我来说很痛苦。在这里,我需要一些关于这个用例中最佳实践的建议?非常感谢

1 个答案:

答案 0 :(得分:0)

对于对此问题感兴趣的人。我已经实施了一个有效的解决方案我认为这应该是典型的并行/并发问题 yohjp 评论:

1 "Pipelined" tasks
2 "Join" on each of the stage

我使用了[num_stage] pthread屏障数组和[num_stage + 1](pthread_cond_t,pthread_mutex_t)对数组。因为在主线程中,它将使用另一个条件变量来启动。

如果有人想要示例代码,请通过电子邮件与我联系,因为它是一项任务工作的一部分,我无法将代码发布到github。

这是我的第一个使用原始pthread api的非试用多线程程序,非常愉快的体验:)