0

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

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->index中的数字都会改变,所以有时候排序的不是正确的segment。我知道要解决这个问题,我必须传入我创建的结构数组作为 pthread_create 中的第四个参数,但我无法想出一个主意,因为该结构也有要排序的数组。

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

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

4

1 回答 1

0

就像您有一个数组以便每个 pthread 有自己的 tid 一样,有另一个数组以便每个 pthread 可以有自己的索引:您可以将不同的结构传递给每个 pthread,它存储该 pthread 的索引以及指向该结构的指针他们都分享。

于 2013-10-12T00:23:10.180 回答