Discusión:Mecanismos de sincronización

De Wiki de Sistemas Operativos
Revisión del 23:05 2 may 2011 de Fcoramlop (discusión | contribuciones) (Duda sobre Optimistas)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

- A mi enteder en el fragmento de codigo de :

int compartida = 1, tmp; retry:

       tmp = compartida;        /* almaceno el valor de la variable compartida en una temporal. */
       tmp++;                   /* actualizo la varible temporal. */
       if (compartida+1 != tmp) /* compruebo si la variable compartida ha sido modificada */
           goto retry;          /* mientras operaba con la variable temporal. */

¿no deberia en vez de modificar la variable temporal , modificar la variable compartida?

Ya que como dice al principio los dos procesos tienen el mismo codigo entonces, en ambos la variable compartida no es modificada, se modifica la variable temporal.

Ejemplo: El proceso A empieza a ejecutarse y se queda en la linea tmp ++ por que agota su ventana de tiempo, el proceso B empieza a ejecutar, y tmb se queda en estado preparado por que agota su ventana de tiempo en la instruccion tmp ++, en este caso ambos procesos han acedido al recurso comportido y la instruccion if la cumple.

¿Que os parece?