【发布时间】:2011-10-04 15:21:18
【问题描述】:
我正在构建一个简单的作业系统,它允许我创建一个具有依赖关系的作业图......类似于:
Job root;
Job job1;
Job job1_1;
Job job1_2;
Job job2(&job1, 1); // job2 cannot start until job1 finishes.
job1.addJob(&job1_1);
job1.addJob(&job1_2);
root.addJob(&job1);
root.addJob(&job2);
root.execute(); // execute the job graph.
我正在使用 pthreads 来实现这一点,但我是这类程序的新手,我找不到同步所有这些的方法。
我尝试使用 pthread_join 来做这样的事情:
void Job::execute()
{
for(int i = 0; i < numDependencies; ++i)
dependencies[i].join(); // calling pthread_join
for(int i = 0; i < numSubJobs; ++i)
subJobs[i].start(); // calling pthread_create
... do some work here
for(int i = 0; i < numSubJobs; ++i)
subJobs[i].join(); // calling pthread_join
}
但是我的程序在一次 pthread_join 调用中崩溃了。
来自 pthread 文档:
多次同时调用 pthread_join() 的结果 指定相同的目标线程是未定义的。
如何在没有崩溃的情况下获得相同的结果?
谢谢
【问题讨论】:
标签: pthreads