Linuxシステム上のスレッドでいくつかの最初のステップを実行していますが、このエラーは、n
引数を取得したプログラムのベースで発生し、n
スレッド数。スレッドを実行する必要がありますpthread_joinを使用した場合のセグメンテーションフォールト(終了コード139)
機能:
void* function(void* arg){
int id = (long)arg;
printf("Thread #%ld created!\n",id);
pthread_exit(0);
}
int main(int argc, char **argv){
if(argc != 3){
printf("Usage: %s <num> <exp>\n",argv[0]);
exit(-1);
}
int num = atoi(argv[1]), exp = atoi(argv[2]);
long i;
pthread_t threads[num];
pthread_attr_t attr;
printf("Creating %d threads \n",num);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);
for (i = 0; i < num; i++) {
pthread_create(&threads[i],&attr,function,(void*)i);
}
pthread_attr_destroy(&attr);
for (i = 0; i < num; i++) {
printf("Thread #%d is %ld\n", i, threads[i]);
}
for (i = 0; i < num; i++) {
pthread_join(threads[num], NULL);
}
}
main
関数のコードの重要な部分。ここ
は、コードの重要な部分であります最後のfor
ループを確認する私がコメントアウトするとプログラムは正常終了しますが(出口コード0)、メインプロセスが終了する前にすべてのスレッドが実行されているわけではないので、明らかに出力が間違っています。
私のLinux OSで端末を使用して実行しようとするとsegmentation fault (core dumped)
と表示され、IDE(CLion)ではProcess finished with exit code 139
が実行されています。
私は間違っていた何かを見つけることができませんでした。それは何かを見つけるのが難しいはずがない非常に基本的なプログラムであるため、エラーの原因となる問題は何ですか?
ヒント:「セグメント化エラー」と「プロセスが終了コード139で終了しました」は同義です。 139 = 0x80 |これは、シェルが実行するプログラムがシグナル11のセグメンテーションフォルトによって終了すると、シェルが終了コードとして返すものです。 – ikegami