Ir para conteúdo
Fórum Script Brasil

DukaCc

Membros
  • Total de itens

    4
  • Registro em

  • Última visita

Tudo que DukaCc postou

  1. DukaCc

    Uso thread com C

    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.
  2. Bom galera eu descobri o erro, é porque para ler double tenho q usar %lf, eu pensava que fosse %f. Obrigado ai.
  3. Eu tenho o seguinte codigo... printf("\nDigite os intervalos 'a' e 'b' respectivamente: "); scanf("%f", &a); printf(" "); scanf("%f", &b); printf("\nDigite o erro: "); scanf("%f", &erro); resultado = divMeio(a, b, erro); printf("\nResultado: %f", resultado); e divMeio é uma função do tipo "double divMeio(double a, double b, double erro)"... o que acontece é que quando eu passo os valores normal na chamada da funcao, por exemplo, divMeio(1, 2, 0.01), ele funciona normalmente, porém quando eu leio os valores e armazeno nas variaveis acima e os repasso para a chamada de sistema o programa não funciona e parece q pega valores da lixeira. Ele imprime qualquer coisa. Será que para ler double realmente seria o %f ou seria outro problema?? Obrigado
  4. DukaCc

    Duvida com threads

    Bom galera, eu tenho q implementar um algoritmo que trabalhe o mergesort de forma "pararela" usando threads, porém, a minha dúvida é a seguinte, como posso dividir o algoritmo em varias threads, sendo q eu quero que ele ordende um vetor, e cada etapa do processo de ordenação seja feito por uma thread paralelamente e isso tudo usando posix. Eu dei uma olhada no google mas não consegui encontrar nada muito objetivo. Muito obrigado desde já.
×
×
  • Criar Novo...