Para que el proceso Padre entre en su sección
crítica la variable' c1 'debe valer 'False' o bien la variable 'Turno'
vale 1.
Si el proceso Padre y el proceso Hijo pudieran ejecutar en sus secciones
críticas al mismo tiempo, entonces 'c1=c2=True'.
Estas dos observaciones implican que el proceso
Padre y el proceso Hijo no podrían haber ejecutado con éxito
sus instrucciones while aproximadamente al mismo tiempo, puesto
que el valor de Turno puede ser 1 ó 2, pero no ambos. De aquí,
que uno de los procesos tiene que haber ejecutado con éxito la instrucción
while mientras que el otro proceso tendría que ejecutar al
menos, una instrucción ' Turno= 2' ( proceso Padre) más.
No obstante, puesto que en este momento
'c2= True' y 'Turno=1', y puesto que esto persistirá mientras el
proceso Hijo se encuentre en su sección crítica, el resultado
es que la exclusión mutua queda preservada ( de igual forma para
el proceso Hijo).
*c1='F'; *c2='F'; if (0!=fork()) { /* Proceso Padre */ int i; fprintf(fsal,"P1: SOY EL PROCESO PADRE\n"); for (i=0; i<nIteraciones; i++){ *c1='T'; /* Seccion */ *turno=2; /* de */ while (((*c2)=='T') && ((*turno)==2)); /* entrada */ incrementa(recurso, -5); /* Seccion */ fprintf(fsal,"P1: recurso[%d]=%d\n", i, *recurso); /* critica */ *c1='F'; /* Seccion de salida */ }/* fin del for */