
allanmarcello
(usa KUbuntu)
Enviado em 22/06/2019 - 13:08h
ainda estou desenvolvendo
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define NUM_THREADS 2
int nRep = 10;
int flag[2] = {0, 0}; // flag é um vetor de booleanos
int turno = 0; // booleano, turno significa "vez"
int _valor;
int priRodada = 1; //variavel para a primeira rodada
void *f_thread(void *v)
{
int id = *(int *)v;
int i;
//if(priRodada == 1 && id == 0)
for (i = 0; i < nRep; i++)
{ //primeira rodada 1/ segunda ...0
if (priRodada == 1); // para sempre iniciar a primeira threads
//for (int x = 0;)
else{
// Algoritmo de Peterson
turno = !id; // Passo a vez para o outro
// Enquanto o outro quer entrar e não é minha vez, aguardo...
while (flag[!id] == 1 && turno != id)
;
}
// InÃcio da região crÃtica
flag[id] = 1; // Quero entrar na Região CrÃtica
_valor = id;
if (id == 0)
printf("TIC\n");
if (id == 1)
printf("\t\tTAC\n");
// Fim da região crÃtica
flag[id] = 0; // Não quero entrar na região crÃtica
priRodada = 0;
}
return NULL;
}
int main(int argc, char *argv[])
{
if (atoi(argv[1]) != 0)
nRep = atoi(argv[1]);
pthread_t thr[NUM_THREADS];
int id[NUM_THREADS], i;
for (i = 0; i < NUM_THREADS; i++)
{
id[i] = i;
//pthread_create(&thr[i], NULL, f_thread, &id[i]);
pthread_create(&thr[i], NULL, f_thread, (void *)&id[i]);
}
for (i = 0; i < NUM_THREADS; i++)
pthread_join(thr[i], NULL);
return 0;
}
achei um novo problema, a ordem não fica exata