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 の番号が変更されるため、正しいセグメントがソートされないことがあります。これを修正するには、作成した構造体の配列を 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;
}

誰かが私に少しアイデアをくれませんか?ありがとう!私の英語がわかりにくかったらすみません...

4

1 に答える 1

0

各 pthread が独自の tid を持つように配列を持っているのと同じように、別の配列を持っているので、各 pthread が独自のインデックスを持つことができます: 各 pthread に異なる構造体を渡すことができ、その pthread のインデックスと構造体へのポインターを格納します。それらはすべて共有します。

于 2013-10-12T00:23:10.180 に答える