我制作了这个小程序,以便更多地了解pthreads。我试图在10个线程上计算0-99的幂。没有pthread_join或只加入前4个线程时,它工作正常。加入任何超过4段的程序。当我加入超过前4个帖子时,我的程序会出现段错误的原因是什么。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <pthread.h>
#define NUM_THREADS 10
double *powr;
void *pows(void *arg){
int n = *((int*)arg)*10;
for(int i = n; i < n+10; i++){
powr[i] = pow(i, 2);
}
return NULL;
}
int main(int argc, char *argv[])
{
pthread_t thread_ID[NUM_THREADS];
void *exit_status[NUM_THREADS];
int rank[NUM_THREADS], j;
powr = (double *)malloc(NUM_THREADS*10);
for(j = 0; j < NUM_THREADS; j++){
rank[j] = j;
pthread_create(&thread_ID[j], NULL, pows, &rank[j]);
}
for(j = 0; j < NUM_THREADS; j++){
pthread_join(thread_ID[j], NULL);
}
for(j = 0; j < NUM_THREADS*10; j++){
printf("%.0lf ", powr[j]);
}
return 0;
}
答案 0 :(得分:0)
将malloc(NUM_THREADS*10);
更改为malloc(NUM_THREADS*10*sizeof(double));
后,它正确运行。