Diferencia entre revisiones de «Discusión:Mecanismos de sincronización»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(Duda sobre Optimistas)
 
Línea 1: Línea 1:
 
- A mi enteder en el fragmento de codigo de :
 
- A mi enteder en el fragmento de codigo de :
 
+
<source lang="c">
 
int compartida = 1, tmp;
 
int compartida = 1, tmp;
 
retry:
 
retry:
Línea 7: Línea 7:
 
         if (compartida+1 != tmp) /* compruebo si la variable compartida ha sido modificada */
 
         if (compartida+1 != tmp) /* compruebo si la variable compartida ha sido modificada */
 
             goto retry;          /* mientras operaba con la variable temporal. */
 
             goto retry;          /* mientras operaba con la variable temporal. */
 
+
</source>
 
¿no deberia en vez de modificar la variable temporal , modificar la variable compartida?
 
¿no deberia en vez de modificar la variable temporal , modificar la variable compartida?
  

Revisión del 20:02 3 may 2011

- 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?