Diferencia entre revisiones de «Mecanismos de sincronización»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
Línea 1: Línea 1:
 
Existen dos tipos de mecanismos de sincronización:
 
Existen dos tipos de mecanismos de sincronización:
 
<pre>
 
<pre>
- Optimista: se considera que la frecuencia de acceso a un recurso compartido es baja. He aquí un ejemplo:
+
- Optimista: se considera que la frecuencia de acceso a un recurso compartido es baja.
 
+
</pre>
      Suponemos 2 hilos, hx y hy.
+
<pre>
 
+
Ejemplo de control optimista suponiendo 2 hilos, hx y hy.
              
+
     
== int compartida = 1, tmp; ==
+
             int compartida = 1, tmp;
 
       retry:
 
       retry:
 
             tmp = compartida;        /* anoto */
 
             tmp = compartida;        /* anoto */
Línea 15: Línea 15:
  
 
<pre>
 
<pre>
- Pesimista: se considera que la frecuencioa de acceso al recurso compartido es alta. He aquí un ejemplo:
+
- Pesimista: se considera que la frecuencia de acceso al recurso compartido es alta.
 
+
</pre>
      Suponemos 2 hilos, hx y hy.
+
<pre>
 +
Ejemplo de control pesimista suponiendo 2 hilos, hx y hy.
  
 
             int compartida = 1;
 
             int compartida = 1;

Revisión del 16:50 28 mar 2011

Existen dos tipos de mecanismos de sincronización:

- Optimista: se considera que la frecuencia de acceso a un recurso compartido es baja.
Ejemplo de control optimista suponiendo 2 hilos, hx y hy.
       
            int compartida = 1, tmp;
      retry:
            tmp = compartida;         /* anoto */
            tmp++;                    /* actualizo temporal */
            if(compartida+1 != tmp)
                goto retry;           /* compruebo si la variable compartida ha sido modificada mientras operaba con el temporal */
- Pesimista: se considera que la frecuencia de acceso al recurso compartido es alta.
Ejemplo de control pesimista suponiendo 2 hilos, hx y hy.

            int compartida = 1;
      no_permito_acceso_variable_compartida();  /* protocolo de entrada */
            compartida++;                       /* sección crítica */
      permito_acceso_a_variable_compartida();   /* protocolo de salida */