Ir para conteúdo
Fórum Script Brasil
  • 0

Uso thread com C


DukaCc

Pergunta

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.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...