在 linux C 中使用 Pthread 进行数组分区
Array Partition using Pthread in linux C
我想并行合并排序的分区部分,但我不知道如何继续。请结合我的情况给我出出主意,谢谢!
连续剧部分:
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
{
}
}
最简单直接的解决方案可能是为一个分区生成一个新线程并在调用线程中进入另一个。
pthread_create(&low_pid, NULL, Partition, (void *)ptr_argument)
将 ptr_argument
作为指向共享内存结构的指针,该结构包含指向 arr 的指针和 low/high 值。
当调用线程returns时,在合并前调用pthread_join
与low_pid
进行同步
我想并行合并排序的分区部分,但我不知道如何继续。请结合我的情况给我出出主意,谢谢!
连续剧部分:
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
{
}
}
最简单直接的解决方案可能是为一个分区生成一个新线程并在调用线程中进入另一个。
pthread_create(&low_pid, NULL, Partition, (void *)ptr_argument)
将 ptr_argument
作为指向共享内存结构的指针,该结构包含指向 arr 的指针和 low/high 值。
当调用线程returns时,在合并前调用pthread_join
与low_pid
进行同步