使用struct与pthread合并排序

时间:2013-10-12 00:18:35

标签: c arrays sorting struct pthreads

我正在尝试对存储在每个给定段内的数组中的一些数字进行排序。

typedef struct _sortee{
    int * nums;//array of numbers to be sorted
    size_t num_elems;//# of elements in each segment
    size_t segment_count;//# of segments
    int **ptrs;//pointers to the array of numbers
    int index;
}sortee;

问题是,每次创建一个线程时,sortlist->索引中的数字都会改变,因此有时候不会对正确的段进行排序。我知道要解决这个问题我必须传入我在pthread_create中创建的第4个参数的结构数组,但由于结构体的数组也要排序,所以我无法提出一个想法。

pthread_t tid[sortlist->segment_count];
for(i=0; i<(int)sortlist->segment_count; i++){
    sortlist->index = i;
    pthread_create(&tid[i], NULL, sort, sortlist);
}


for(i=0; i<(int)sortlist->segment_count; i++){
    sortlist->index = i;
    pthread_join(tid[i], NULL);
}

这是排序算法的第一部分。运行之后,我有另一个合并函数来对其余部分进行排序。

void *sort(void *ptr) {
sortee *sortlist = (sortee *)ptr;

qsort(sortlist->ptrs[sortlist->index], sortlist->num_elems, sizeof(int), comp);
fprintf(stderr, "Sorted %d elements.\n", (int)sortlist->num_elems); 
return sortlist;
}

有人可以给我一些想法吗?谢谢!对不起,如果我的英语很难理解......

1 个答案:

答案 0 :(得分:0)

正如你有一个数组所以每个pthread有自己的tid,有另一个数组,所以每个pthread都可以拥有它自己的索引:你可以传递一个不同的结构到每个pthread,它存储了pthread的索引和指针他们共享的结构。