0
#include<pthread.h>
#include<stdio.h>
int value=0;
void *runner(void *param);
int main(int argc,char *argv[])
{
int pid;
pthread_t tid;
pthread_attr_t attr;
pid=fork();
if(pid==0){
pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,NULL);
pthread_join(tid,NULL);
printf("CHILD VALUE=%d",value);
}
else if(pid>0){
wait(NULL);
printf("PARENT VALUE=%d",value);
}
}


void *runner(void *param){
value=5;
pthread_exit(0);
}

子と親の値は何ですか?? 子とそれによって作成されたスレッドはデータを共有しますか? 出力は5と0になりますか?

4

2 に答える 2

1

子とそれによって作成されたスレッドはデータを共有しますか?

いいえ。親のメモリの場合、子プロセスはコピーを取得すると考えることができます。したがって、子によって行われた変更は親には表示されません。

出力は5と0になりますか?

はい: 子は 5 を出力し、親は 0 を出力します (この順序である必要はありません)。

于 2012-05-02T13:13:35.947 に答える
1

何が起こるかは次のとおりです。

  • 子プロセスは、親のメモリ空間を複製することによって作成されます。親と同じデータが表示されますが、コピーにすぎないため、互いに干渉することはできません。子プロセス (またはそのスレッドのいずれか) によって行われた後続の変更は、それ自体にのみ表示されます。
  • 子プロセスによって生成されたスレッドは、子プロセスのメイン スレッドとメモリ空間を共有し、親プロセスの値のコピーを確認します。

したがって、子によって生成されたスレッドで割り当てられた値は、子プロセス内でのみ表示され、親プロセス内では表示されないため、結果は 5 と 0 になります。

于 2012-05-02T13:21:38.070 に答える