/* * Cuando dos hebras acceden a un mismo dato y una de ellas lo modifica, otras * podrían leer un valor inconsistente si no usamos mecanismos de exclusión mutua. * Se desea medir el tiempo que toma en aparecer esa inconsistencia. * Para ello se le pide hacer un programa que use dos hebras. * En una usted intercambiará el valro de una variable global entre "1111111" y "2222222000". * La otra hebra leerá el valor de la variable, * si éste es distinto de los dos valores indicados, enviará una alerta a pantalla * y terminará la aplicación. Como este proceso podría tomar * mucho tiempo, se le pide definir un tiempo máximo de ejecución en segundos * ingresado como argumento en la línea de ejecución del programa. * Transcurrido este tiempo el programa avisa que no encontró inconsistencias y termina. * * */ #include #include #include #include #include #include #define value1 "1111111" #define value2 "2222000000" char value[11]; static void sig_alrm(int signo) { printf("I can't find an inconsistancy\n"); exit(0); } void * changeValue(void * arg) { while (1) { if (strcmp(value, value1)==0) strcpy(value, value2); else strcpy(value, value1); } } int main(int argc, char * argv[]) { int err; pthread_t tid; char readValue[11]; int timeout; int* pStatus; timeout = atoi(argv[1]); if (signal(SIGALRM, sig_alrm) == SIG_ERR) exit(-1); strcpy(value, value1); err = pthread_create(&tid, NULL, changeValue, NULL); if (err != 0){ printf("can't create thread \n"); exit(0); } alarm(timeout); /* start the timer */ while (1){ strcpy(readValue, value); if ((strcmp(readValue,value1)!=0) && (strcmp(readValue,value2)!=0)){ printf("Inconsistency, the integer value is %s\n",readValue); exit(0); } } }