Нахождение квадратной суммы массива с pthreads в C - PullRequest
0 голосов
/ 14 мая 2019

Что мне нужно сделать, это рассчитать квадратную сумму массива. Массив и количество потоков должны быть заданы пользователем, и мы предполагаем, что количество элементов и количество потоков разделены как единое целое.

Мой код даже не компилируется. Я знаю, что у меня проблемы с указателями, и я должен разместить мьютексы, но я не знаю, где именно. Можете ли вы указать мне правильное направление? Я буду очень благодарен.

#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>

int part = 0;
int local_elements = 0;

void* square_sum(void* arg)
{
    int local_sum = 0;
    int *element_array[] = (int *)arg;

    //Each thread computes its part
    int thread_part = part++;

    for (int i = thread_part * loc_elements; i < (thread_part + 1)*loc_elements; i++) {
        local_sum += element_array[i] * element_array[i];
    }

    return (void*)&local_sum;
}

main()
{
    int threads, total_elements;
    int i;
    int total_sum = 0;

    printf("Give the number of threads: ");
    scanf("%d", &threads);

    printf("Give the number of the elements you want: ");
    scanf("%d", &total_elements;)
        int element_array[total_elements];

    //How many elements each thread gets
    local_elements = total_elements / threads;

    printf("Give the %d elements \n", total_elements);
    for (i = 0; i < total_elements; i++) {
        printf("No. %d:", i);
        scanf("%d", &element_array[i]);
    }

    pthread_t newthread[threads];
    //Creating the threads
    for (int i = 0; i < threads; i++) {
        //The start routine gets the whole element_array
        pthread_create(&newthread[i], NULL, square_sum, &element_array);
    }

    int loc_sum;
    //Waiting for each thread to finish and creating the total_sum
    for (int i = 0; i < threads; i++) {
        pthread_join(newthread[i], &loc_sum);
        total_sum += loc_sum;
    }

    printf("The total sum is: %d", &total_sum);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...