2012-05-02 14 views
1
#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になりますか?子プロセス内にスレッドを作成する

+1

ありませんので、それ? –

+0

子の場合は5、親の場合は0。 fork()は新しいプロセスを作成するので、スペースを分離できます。 –

+0

試しましたか? –

答えて

1

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

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

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

はい:子プリント5、親プリント0(必ずしもこの順序ではない)。

1

何が起こるかというと、このです:

  • 子プロセスは親のメモリ空間を複製して作成されます。親と同じデータが表示されますが、コピーだけなので、互いに干渉することはありません。子プロセス(またはそのスレッドのいずれか)によって行われた後続の変更は、それ自身にしか見えません。
  • 子プロセスによって生成されたスレッドは、子プロセスのメインスレッドとメモリ空間を共有し、親プロセス内の値のコピーを再度参照します。したがって

、あなたがしようとすると何が起こる子によって生成されたスレッドに割り当てられた値は唯一の子プロセス内で表示されますが、親プロセスの内部で、結果は5と0

関連する問題