在C中使用pthread查找数组的平方和

时间:2019-05-14 00:22:53

标签: c pthreads

我需要做的是计算数组的平方和。数组和线程数必须由用户指定,并且我们假设元素数和线程数是整数除法。

我的代码甚至都没有编译。.我知道我的指针有问题,应该放置互斥对象,但我不知道确切的位置。你能指出我正确的方向吗?我会非常感激。

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

0 个答案:

没有答案
相关问题