【发布时间】:2013-04-20 08:52:15
【问题描述】:
所以我在修订期间看到了以下代码。我知道 wait() 会导致父母等待孩子停止,但我对此有一些疑问。
首先,当孩子被创建时,我的假设是否得到纠正,即父母继续,改变 x 值,然后在 if 语句之后等待?
其次,当孩子继续执行并开始等待()时,会发生什么?这是否因为没有什么可等待而被忽略?
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main() {
int x = 1;
pid_t pid = fork();
if (pid == 0) {
x = x * 2;
} else if (pid > 0) {
x = 3;
}
wait();
// Print the value of x to the console
printf("%d\n",x);
}
【问题讨论】:
-
你试过了吗?程序是否似乎挂起(关于您的第二个问题)?
-
是的(关于您的第一个问题)。
-
wait()的声明是pid_t wait(int *stat_loc),虽然允许传递 0 或 NULL 来代替指针,但您必须传递一些东西作为参数。当然,您需要包含#include <sys/wait.h>以使编译器能够警告您——但您不应该编译代码以便可以使用范围内没有原型的函数。在当前的 POSIX 系统上,您不需要#include <sys/types.h>(它会自动包含在内;在原始 POSIX — 1988、1990 中是必需的)。
标签: c concurrency wait system-calls