指定された各セグメント内の配列に格納されているいくつかの数値を並べ替えようとしています。
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 の番号が変更されるため、正しいセグメントがソートされないことがあります。これを修正するには、作成した構造体の配列を 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;
}
誰かが私に少しアイデアをくれませんか?ありがとう!私の英語がわかりにくかったらすみません...