如何使用 fork() 知道代码中的输出?
How to know the output in the code with fork()?
#include <unistd.h>
#include <sys/wait.h>
int main ()
{
W(A);
int child=fork();
W(B);
if (child)
wait(NULL);
W(C);
}
我认为 ABBCC 将是输出之一,但也是下一个:ACCBB、ABB、ABCBC、ABCAA 应该是正确的。 W表示写,W(A)、W(B)、W(C)表示写A、B、C。请帮忙。
ACCBB
不可能。
我会为parent打印的字母添加下标p,child会添加c ].
parent进程打印ApBpCp在该顺序,child 进程按该顺序打印 BcCc。
Ap 将首先打印,因为它是在分叉之前打印的。 parent 在打印 Cp 之前等待 child 退出,因此它必须排在最后。所以这意味着第一个和最后一个字符是 A
和 C
.
在这之间,两个进程之间的执行顺序没有任何限制。所以以下是可能的:
BpBcCc
BcBpCc
BcCcBp
前两个在输出中看起来相同,因为我们无法区分 Bp 和 Bc
所以可能的结果是:
ABBCC
ABCBC
这一切都假设没有可能延迟输出的缓冲。 IE。这只是一个检查语句在并发进程中执行顺序的练习,并不是关于 I/O.
#include <unistd.h>
#include <sys/wait.h>
int main ()
{
W(A);
int child=fork();
W(B);
if (child)
wait(NULL);
W(C);
}
我认为 ABBCC 将是输出之一,但也是下一个:ACCBB、ABB、ABCBC、ABCAA 应该是正确的。 W表示写,W(A)、W(B)、W(C)表示写A、B、C。请帮忙。
ACCBB
不可能。
我会为parent打印的字母添加下标p,child会添加c ].
parent进程打印ApBpCp在该顺序,child 进程按该顺序打印 BcCc。
Ap 将首先打印,因为它是在分叉之前打印的。 parent 在打印 Cp 之前等待 child 退出,因此它必须排在最后。所以这意味着第一个和最后一个字符是 A
和 C
.
在这之间,两个进程之间的执行顺序没有任何限制。所以以下是可能的:
BpBcCc
BcBpCc
BcCcBp
前两个在输出中看起来相同,因为我们无法区分 Bp 和 Bc
所以可能的结果是:
ABBCC
ABCBC
这一切都假设没有可能延迟输出的缓冲。 IE。这只是一个检查语句在并发进程中执行顺序的练习,并不是关于 I/O.