Bom, estou tentando fazer um programa que execute o algoritmo de ordenação merge-sort em paralelo usando os varios processadores de uma computador multiprocessado usando thread. O programa funciona em duas etapas, a parte em que ele divide o vetor e a segunda (onde ocorre o uso de threads), que ordena os pedaços usando thread. Os codigos são esse: Divisao do vetor e chamada da função que ordena os vetores void m_sortT(int vet[], int esq, int dir){
pthread_t *t = malloc(sizeof(pthread_t));
param *arg = malloc (sizeof(param));
arg->vet = vet;
arg->esq = esq;
arg->dir = dir;
if (arg->dir > arg->esq) {
arg->meio=(arg->dir + arg->esq)/ 2;
m_sortT(arg->vet, arg->esq, arg->meio);
m_sortT(arg->vet, arg->meio+1, arg->dir);
pthread_create(t, NULL, mergeT, (void *) arg);
}
}
Ordenação dos vetor:
void *mergeT(void *arg) {
param *p = (param *) arg;
//p = (param *) malloc (sizeof(param));
int i,esq_fim,num_elementos,aux_pos;
int *aux;
int *vetor;
aux =(int *) malloc(sizeof(int) * p->dir);
vetor = p->vet;
esq_fim = (p->meio)-1;
aux_pos = p->esq;
num_elementos = (p->dir) - (p->esq) + 1;
while ((p->esq <= esq_fim)&&(p->meio <= p->dir)) {
if (p->vet[p->esq] <= p->vet[p->meio]) {
aux[aux_pos] = p->vet[p->esq];
aux_pos = (aux_pos) + 1;
p->esq = (p->esq) + 1;
}
else {
aux[aux_pos] = p->vet[p->meio];
aux_pos = aux_pos + 1;
p->meio = (p->meio) + 1;
}
}
while (p->esq <= esq_fim) {
aux[aux_pos] = p->vet[p->esq];
p->esq = (p->esq) + 1;
aux_pos = aux_pos+1;
}
while (p->meio <= p->dir) {
aux[aux_pos] = p->vet[p->meio];
p->meio = (p->meio) + 1;
aux_pos = aux_pos+1;
}
for (i=0;i<num_elementos;i++) {
p->vet[p->dir] = aux[p->dir];
p->dir = (p->dir) - 1;
}
} Estou passando como parametro um vetor de 10 posições vet[] = {10,9,8,7,6,5,4,3,2,1} alguém saberia me dizer onde estou errado?? Muito obrigado.