Mecanismos de sincronización
Mecanismos de sincronización
Tipos de mecanismos de sincronización :
Optimista
Se considera que la frecuencia de acceso a un recurso compartido es baja, es decir, suponemos que la probabilidad de acceso simultanea 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. En este mecanismo disponemos de tres partes :
- Un protocolo de entrada : en el cual se restringe el permiso de acceso para las variables compartidas.
- Una sección crítica : donde se realizan todas las operaciones con las variables compartidas.
- Un protocolo de salida : en el cual se restablece el permiso de acceso para las variables compartidas.
(Toda operación con una variable compartida necesita un protocolo de entrada y otro de salida)
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 */
¿Cómo implementamos el protocolo de E/S en el control de concurrencia pesimista?
Interrumpiendo la conmutación, desactivando las interrupciones, seguidamente ejecutando la sección crítica y finalmente permitiendo el acceso a las variables compartidas y activando las interrupciones.
¿Cómo implementar el control de concurrencia pesimista?
- Espera ocupada/activa : cerrojos. Se comprueba continuamente la condición que permite franquear el protocolo de entrada
- Espera no ocupada/no activa : semáforos, monitores y mensajes. Se pasa a estado bloqueado cuando no se puede franquear el protocolo de entrada.