我正在尝试对存储在每个给定段内的数组中的一些数字进行排序。
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;
}
有人可以给我一些想法吗?谢谢!对不起,如果我的英语很难理解......
答案 0 :(得分:0)
正如你有一个数组所以每个pthread有自己的tid,有另一个数组,所以每个pthread都可以拥有它自己的索引:你可以传递一个不同的结构到每个pthread,它存储了pthread的索引和指针他们共享的结构。