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