gpt4 book ai didi

c - pthreads/等待(&状态)

转载 作者:太空狗 更新时间:2023-10-29 15:36:31 25 4
gpt4 key购买 nike

我读了一本书,给出了下一个例子:

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 时。

其次,在printf("Second process value: %d", value);这一行中,vaule可以是1到6。这也很奇怪,因为我们有join指令.

最佳答案

问题的答案:

  1. 父进程中的值将为 0,因为当 fork 发生时,父进程的地址空间(连同变量 value)在子进程。因此,尽管 value 在子级中发生了变化,但这种变化不会反射(reflect)在父级中,因为它们是不同的变量。

  2. 由于不涉及同步,因此无法知道三个子线程更改变量 value 的顺序。具体来说,每个线程都有一个具有不同值的局部 temp 变量,然后将其复制到全局 value 变量中,但无法知道线程的顺序将在此处用 temp 覆盖 value:value = temp;。因此,它的值可能会因执行而异。

关于c - pthreads/等待(&状态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10719438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com