在Linux C中使用Pthread的数组分区

时间:2016-04-21 05:25:17

标签: c linux parallel-processing pthreads mutex

我想并行合并排序的分区部分,但我不知道如何继续。请根据我的情况给我一些想法,谢谢!

序列部分:

void Partition(int arr[], int low, int high)
{
    int mid;    
    if(low < high)
    {
        mid = (low + high)/2;
        Partition(arr, low, mid); //first half of data
        Partition(arr, mid+1, high);//second half of data
        MergeSort(arr, low, mid, high);
    }
}

对于并行版本我有什么:

void *PartitionTask(void* rank)
{
    long my_rank = (long)rank;
    if(my_rank == 0)
    {
        int mid;    
        if(low < high)
        {
            mid = (low + high)/2;
            Partition(arr, low, mid); //first half of data
            Partition(arr, mid+1, high);//second half of data
            MergeSort(arr, low, mid, high);
        }
    }
    else
    {

    }
}

1 个答案:

答案 0 :(得分:2)

最简单直接的解决方案可能是为一个分区生成一个新线程,然后在调用线程中输入另一个分区。

pthread_create(&low_pid, NULL, Partition, (void *)ptr_argument)

使用ptr_argument作为指向共享内存结构的指针,该结构包含指向arr和低/高值的指针。

当调用线程返回时,请在pthread_join之前调用low_pid进行同步,然后才能进行合并。