Ir ao conteúdo
  • Cadastre-se

XxESXxX

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Gente preciso fazer um programa com 4 threads que executem como um pipeline ideal de 2 ciclos, cada thread tem 5 instruções e cada instrução tem que esperar 2 segundos pra iniciar a próxima. No fim deve printar na tela o thread e a instrução. Meu problema é que na parte de implementar um pipeline eu não sei o que fazer ,alguem pode me ajudar por favor? #include <stdio.h> #include <pthread.h> #include <time.h> #include <unistd.h> #include <stdlib.h> //quantas vezes passa pelo total de threads (aumenta o tempo) //se quiser 2 segundos, 3, é só aumentar esse define #define somathreads 1 int res = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void delay (int miliseconds){ long pause; clock_t now,then; pause = miliseconds*(CLOCKS_PER_SEC/1000); now = then = clock(); while( (now-then) < pause ) now = clock(); } void atraso(int tempo){ int t; t = tempo; usleep(tempo*1000); } void thread_cont2(void *arg){ pthread_mutex_lock(&mutex); int *pvalor; pvalor = arg; int i,ciclos=1; printf ("\nThread %i \n", *pvalor); printf ("\nCiclo: %i e %i \n", *pvalor, *pvalor+1); for(i=0;i<somathreads;i++){ //aqui incrementa quando passa por uma thread res += 1; printf("Espera de 2 segundos->\n"); delay(2000); } printf ("\nFim da thread %i \n", *pvalor); pthread_mutex_unlock(&mutex); //FIM DA SEÇÃO CRÍTICA } void thread_cont(void *arg){ int *pvalor; pvalor=arg; int i; pthread_mutex_lock(&mutex); printf ("\n---Thread %i--- \n", *pvalor); for(i=1;i<6;i++){ printf ("Estágio %i\n", i); delay(2000); } pthread_mutex_unlock(&mutex); } int main(){ //cria threads pthread_t id1; int offset1 = 1; pthread_create(&id1, NULL, thread_cont, &offset1); pthread_t id2; int offset2 = 2; pthread_create(&id2, NULL, thread_cont, &offset2); pthread_t id3; int offset3 = 3; pthread_create(&id3, NULL, thread_cont, &offset3); pthread_t id4; int offset4 = 4; pthread_create(&id4, NULL, thread_cont, &offset4); int i; //espera dos threads for(i=1;i<6;i++){ do{pthread_join(id1, NULL);}while(i=1); do{pthread_join(id2, NULL);}while(i=2); do{pthread_join(id3, NULL);}while(i=3); do{pthread_join(id4, NULL);}while(i=4); } printf("\n"); //mostra o numero de vezes que passou pelos threads // printf("Threads usados: %i \n", res); return 0; } Tem algumas coisas aí que são meio inúteis ou ja nem existem mais mas n sei como fazer. Como é possível ver tentei por os pthread_join dentro de um for mas n deu certo. Ajuda por favor, não sei como fazer, Obrigado

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...