pthread_join () segfault - PullRequest
       23

pthread_join () segfault

0 голосов
/ 27 мая 2018

Я сделал эту маленькую программу, чтобы немного понять pthreads.Я пытался вычислить силы 0-99 более 10 потоков.Он отлично работает без pthread_join или когда я присоединяюсь только к первым 4 потокам.Присоединение к чему-либо выше 4 segfaults программа.По какой причине моя программа не работает, когда я присоединяюсь к более чем четырем первым потокам.

#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;
}

1 Ответ

0 голосов
/ 28 мая 2018

после изменения malloc(NUM_THREADS*10); на malloc(NUM_THREADS*10*sizeof(double)); работает правильно.

...