我读了一本书,给出了下一个例子:
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)
}
我不明白两个主要的事情:当我阅读时,该行的唯一值printf("First process value: %d", value)
是 0。但是为什么呢?wait(&status) 等待子进程终止。在这种情况下,它只会在所有连接完成后才会终止。意思是,当值为 6 时。
其次,在 lineprintf("Second process value: %d", value);
中,值可以是 1 到 6。这也很奇怪,因为我们有 join 指令。