/* Cree el programa "democracia.c" para simular el conteo de votos en una elección. Democracia.c recibe dos argumentos enteros E1 y E2 como en: $ democracia 100 500 * E1 = 100, E2 = 500. * Se tiene una hebra Th1 que genera y procesa los votos de la elección de un cargo para el cual hay 2 candidatos A y B. Hay un contador de preferencias por cada candidato. Por simplicidad no hay nulos ni blancos. Desarrolle el programa democracia.c siguiendo los lineamientos datos y garantizando el acceso exclusivo a los datos compartidos. $ gcc -o democracia -pthread democracia.c */ #include #include /* drand48() */ #include /* usleep */ #include int votos_A=0; int votos_B=0; pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER; void * showResult(void * arg) { int wait = *((int *)arg); float a, b; while (1) { pthread_mutex_lock(&mylock); a = (float)votos_A/(votos_A+votos_B); pthread_mutex_unlock(&mylock); b = 1-a; printf("A: %f % b: %f %\n", 100*a, 100*b); usleep(wait); } } int main(int argc, char * argv[]) { int err, e1, e2, i; double r; pthread_t tid; e1 = 1000*atoi(argv[1]); e2 = 1000*atoi(argv[2]); err = pthread_create(&tid, NULL, showResult, &e2); if (err != 0){ printf("can't create thread \n"); exit(0); } for (i = 0; i < 50; i++){ r = drand48(); pthread_mutex_lock(&mylock); if ( r < 0.4) votos_A++; else votos_B++; pthread_mutex_unlock(&mylock); usleep(e1); } }