0

C の fork() に関するいくつかの記事を読んでいるときに、理解できない次の例 (以下のコード) を見ました。

問題の理解: "if" または "else" のみを実行し、両方は実行しません。しかし、子プロセスと親プロセスは「同時に」実行されるため、この例では、「if」と「else」の両方を実行したことがわかります。同時ではありますが、実際にはそうではなく、どちらのプロセスが最初に CPU を取得するかによって異なります (そうですか?)。

すべてを「奇妙」にしているのは、最初に「else」を通過し、次に「if」を通過する可能性があることです。これはどのように可能ですか?

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
void forkexample()
{
    // child process because return value zero
    if (fork() == 0)
        printf("Hello from Child!\n");
  
    // parent process because return value non-zero.
    else
        printf("Hello from Parent!\n");
}
int main()
{
    forkexample();
    return 0;
}

可能な出力は次のとおりです。

チャイルドからこんにちは!

親からこんにちは!

(また)

親からこんにちは!

チャイルドからこんにちは!

4

2 に答える 2