Я пытаюсь отсортировать 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);
}
}*/
}
Я застрял в том, как написать условия для объединения деталей, отсортированных по потокам на каждом уровне.