Синхронная многопоточная сортировка слиянием - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь отсортировать n номеров массива моих m потоков. Таким образом, с учетом массива 49 10 34 9 32 37 48 37, Для первой части сортировки слиянием я разрезаю (n / m) на части и каждый поток сортирует свою часть.
n = 8;
m = 4
Итак, теперь я понял.

Тема0 Тема1 Тема2 Тема3
10 49 .... 9 34 ...... 32 37 ..... 37 48

Теперь поток 0 будет ожидать Сигнал из потока 1 и потока 2 будет ожидать сигнала из потока 3 для слияния на первом уровне. На следующем уровне поток 0 будет объединен с потоком 3 для получения окончательного результата.

void *start(void *arg){
    struct tsk *tsk = arg;
    int low;
    int high;
    int levels = log2 (m); // gets the # of levels 

    // get low and high of each thread
    low = tsk->low;
    high=tsk->high;
    //printf("%d", low);

    // mid-point
    int mid = low + (high - low) / 2;
    if (low < high){
        merge_sort(low,mid);
        merge_sort(mid+1,high);
        merge(low, mid, high);

    }
    int i;

    /* Local Synchronization
    for(i = 0; i < levels; i++){
        if(id % 2 == 0){
            pthread_mutex_lock(&mutex);
            pthread_cond_wait(&cond, &mutex); 


        }
    }*/
}

Я застрял в том, как написать условия для объединения деталей, отсортированных по потокам на каждом уровне.

...