POSIX pthread ライブラリを使用して次のコードを作成しました。
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
pthread_t pid1,pid2;
void *test(void *arg)
{
void **end;
printf("\nNew Thread ID: 0x%x\n",(unsigned int)pid2);
pthread_join(pid1,end);
printf("\nNew Thread going to go off\n");
printf("\nNew Thread ID: 0x%x\n",(unsigned int)pid2);
return ((void *)NULL);
}
int main()
{
pid1 = pthread_self();
pthread_create(&pid2,NULL,test,NULL);
printf("\nMain Thread ID: 0x%x\n",(unsigned int)pid1);
sleep(2);
printf("\nI am going off\n");
pthread_exit(0);
}
コードを実行すると、次の出力が得られました。
メイン スレッド ID: 0xb7880b30 新しいスレッド ID: 0xb787eb70 私は行きます セグメンテーション違反
私が調べたように、pthread_join を呼び出すスレッド (pid2) は、引数 (pid1) で渡されたスレッドが pthread_exit() を呼び出すまでブロックされます。また、pthread_exit() は、特定のスレッドの実行を停止して、他のすべてのスレッドの実行を継続させるために使用されます。
最後にセグメンテーション違反が発生した理由を知りたいです。
きちんと説明してください。