我正在尝试对每个给定段内存储在数组中的一些数字进行排序。
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;
}
有人可以给我一点想法吗?谢谢!对不起,如果我的英语很难理解...