/* * File : critico2.c * * Title : Demo Race Conditions. * * Short : Software solution for mutex * * Author : Paul Crocker * * Date : 25 Abril de 2004 */ #include #include #include #define PAUSA(A) {fflush(stdin);printf("Pausa %s\n",A);getchar();} /* Na meu PC da gabinete.. com os valores em baixo ..erro! tirar comentários em baixo para ver que .. já não tem erros ,, mas leve muito mais tempo .. */ #define pausa {double indicez1;for(indicez1=0;indicez1<10000;indicez1=indicez1+0.99);} #define VALOR 1000 /* variaveis partilhadas pelos threads */ float x=0; int turn=1; int flag[2]; void *critico2 (void *args); int main(int argc, char* argv[]) { pthread_t th[2]; int i,id[2]={1,2}; PAUSA("Start: Iniciar press return ") for (i=0;i<2;i++) pthread_create (&th[i], NULL, critico2, &id[i]); for (i=0;i<2;i++) pthread_join ( th[i], NULL); printf("error = %f\n",x-3.0*VALOR); PAUSA("Fim : press return"); return 0; } void *critico2 (void *args) { int i,id,outro; id = *((int *)args); outro=1; if ( 1==id ) outro = 2; for (i=0;i