0

我有以下情况:

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

例如:

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

线程 4、5、6 正在执行第二步中的工作

线程 7、8、9 正在执行第三步……

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

这是我想要实现的方法:

  1. 在当前步骤的每个线程中,等待表示当前步骤是否可以启动的条件
  2. 一旦可以开始当前步骤,所有线程都开始工作,并在屏障上等待此步骤中的所有线程完成
  3. 此步骤中的所有线程完成后,在下一步线程正在等待的条件变量上广播

这有意义吗?这里有什么明显的错误吗?

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

4

1 回答 1

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 的非试用多线程程序,相当愉快的体验:)

于 2013-01-28T09:47:48.593 回答