pthreads チュートリアルの演習の一環として、10 個のスレッドを結合するのではなく、10 個のスレッドを作成するプログラムを作成しました。プログラムが実行され、出力が出力されますが、pthread_join への最初の呼び出しでセグメンテーション違反が発生したようです。なぜこれが起こっているのかわかりません。Web で検索してみましたが、関数に渡された無効なポインターに関するほとんどの問題。簡単に確認できないため、これが私のコードと同じ問題であるかどうかはわかりません。
誰かが私を助けることができれば、私は確かにそれを感謝します:)
コードは以下のとおりです。
#include <stdio.h>
#include <pthread.h>
#define NTHREADS 10
void *thread_function(void *arg)
{
int i;
int *coming = (int*) arg;
for(i=0; i<5; i++)
printf("Hello, World (thread %d)\n", *coming);
return NULL;
}
int main(void)
{
int i;
void *exit_status;
int retVal;
pthread_t pthread_array[NTHREADS];
int randVals[10] = {23,5,17,55,9,47,69,12,71,37};
printf("threads are created\n");
for(i=0; i<10; i++)
{
retVal=pthread_create(&pthread_array[i], NULL, thread_function, &randVals[i]);
printf("pthread_create %d retVal=%d\n", i, retVal);
}
printf("threads are joined\n");
for(i=0; i<10; i++)
{
retVal= pthread_join(pthread_array[i], &exit_status);
printf("pthread_join %d retVal=%d and exit_status=%d\n", i, retVal,
*((int *)exit_status));
}
printf("all threads have ended\n");
return 0;
}