次の例を示す本を読みました。
int value=0
int thread_func(int id) {
int temp;
temp=value+id;
printf("Thread%d value: %d", id, temp);
value=temp;
}
int main() {
int fork_id, status, i;
pthread_t tids[3];
fork_id=fork();
if (fork_id == 0) {
for (i=1; i≤3; i++)
pthread_create(&tids[i-1], NULL, thread_func, i);
for (i=0; i≤2; i++)
pthread_join(tids+i, &status);
printf("Second process value: %d", value);
}
else {
wait(&status);
printf("First process value: %d", value)
}
主な 2 つの点がわかりません。読んだところ、行に含まれる値printf("First process value: %d", value)
は 0 だけです。しかし、なぜでしょうか。wait(&status) は、子プロセスが終了するまで待機します。場合によっては、すべての結合が完了した後にのみ終了します。つまり、値が 6 の場合。
第 2 に、 の行printf("Second process value: %d", value);
では、値は 1 から 6 までの範囲で指定できます。結合命令があるため、これも奇妙です。