【发布时间】:2011-08-31 19:55:01
【问题描述】:
正如标题所说。我有一个如下所示的 sn-p 代码:
pid_t = p;
p = fork();
if (p == 0) {
childfn();
} else if (p > 0) {
parentfn();
} else {
// error
}
我想确保父母或孩子在另一个之前执行(但不返回)各自的功能。
调用 sleep() 之类的方法可能会起作用,但不能由任何标准保证,并且只会利用操作系统调度程序的实现细节……这可能吗? vfork 会起作用吗?
edit:这两个函数都找到了 system() 调用的方法,其中一个在另一个启动之前不会返回。所以重申一下:我需要确保父母或孩子只在另一个之前调用他们各自的函数(但不返回,因为它们不会,这是下面所有基于互斥锁的解决方案所提供的)。有任何想法吗?抱歉,不清楚。
edit2:让一个进程调用 sched_yield 和 sleep,我似乎得到了相当可靠的结果。 vfork 确实提供了我正在寻找的语义,但是对我可以在子进程中执行的操作有太多限制(我几乎只能调用 exec)。因此,我找到了一些足够好的解决方法,但没有真正的解决方案。 vfork 可能是最接近我正在寻找的东西,但下面介绍的所有解决方案或多或少都会起作用。
【问题讨论】:
-
我读到这篇文章是因为您需要一个 可预测的 顺序来调用 childfn() 和 parentfn(),而对其中一个没有特别的偏好 - 对吗?跨度>
标签: c exec fork parallel-processing