作为 pthreads 教程练习的一部分,我编写了一个程序来创建 10 个线程,而不是加入 10 个线程。该程序运行并打印输出,但似乎在第一次调用 pthread_join 时会导致分段错误。我不确定为什么会发生这种情况。我尝试在网上搜索,但大多数问题都与传递给函数的无效指针有关。我不确定这是否与我的代码相同,因为我不容易看到它。
如果有人可以帮助我,我当然会很感激:)
代码如下:
#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;
}