これは私のコードです:
for (c = 0; c < PROCESSES; c++) {
pid[c] = fork();
switch (pid[c]) {
case -1:
perror("Faild fork!\n");
break;
case 0:
printf("C = %d\n", c);
if (c == 0) {
printf("MY ID0 %d\n", getpid());
customers();
break;
}
if (c == 1) {
printf("MY ID1 %d\n", getpid());
cashier();
break;
}
if (c == 2) {
printf("MY ID2 %d\n", getpid());
sales();
break;
}
if (c == 3) {
printf("MY ID3 %d\n", getpid());
warehouse();
break;
}
break;
default:
if (c == (PROCESSES - 1)) {
for (j = 0; j < PROCESSES; j++) {
w = wait(&state);
if (w == -1) {
perror("Erro na espera!\n");
}
printf("Terminar processo %d\n", w);
}
sleep(2);
printf("Fim da simulação.\n\n");
free_shm_sem();
}
}
}
私が期待していたこと:
C = 0
MY ID0 3904
C = 1
MY ID1 3905
C = 2
MY ID2 3906
C = 3
MY ID3 3907
どうした:
C = 0
MY ID0 3904
C = 1
MY ID1 3905
C = 2
MY ID2 3906
C = 3
MY ID3 3907
C = 3
MY ID3 3911
私が変更した場合:
if (c == 0) {
printf("MY ID0 %d\n", getpid());
customers();
break;
}
if (c == 1) {
printf("MY ID1 %d\n", getpid());
sales();
break;
}
if (c == 2) {
printf("MY ID2 %d\n", getpid());
cashier();
break;
}
if (c == 3) {
printf("MY ID3 %d\n", getpid());
warehouse();
break;
}
出力は次のようになりました。
C = 0
C = 2
C = 1
MY ID0 3960
MY ID2 3962
C = 3
MY ID1 3961
MY ID3 3963
C = 2
MY ID2 3967
C = 3
MY ID3 3968
なぜ c はその値を変更し、同じ場所を 2 回通過することがありますか?
これは、さまざまなプロセスを実行する fork() n の子の正しい方法ではありませんか?
PS申し訳ありませんが、私の英語は下手です。私が言ったことを理解していただければ幸いです。