Академический Документы
Профессиональный Документы
Культура Документы
Datos compartidos
Slo una hebra
en Monitor al mismo
Cola de hebras tiempo
para usar Monitor
Procedimientos
Cdigo de Inicializacin
Cmo controla acceso Monitor
Exclusin mutua
Slo una hebra/proceso puede estar
ejecutndose dentro del monitor
Sincronizacin esta implcita en el monitor
Si una hebra/proceso trata de entrar al
monitor cuando esta ocupado, entonces se
bloquea hasta que se desocupe
Ms restrictivo que semforos
Ms fcil de usar
Una vez dentro de un monitor una hebra
puede verse incapacitada de continuar
Permite a una que est esperando entrar a monitor
Variables de Condicin
lock
Procedimientos
Cola espera
monitor
monitor
Colas esperas
Variables de
condicin
Cmo resolver problemas con
monitores?
Identificar restricciones inherentes al problema
Identificar datos a encapsular en monitor
Definir procedimientos que accesarn datos
Identificar condiciones de espera y sealizacin,
asociar a variables de condicin
Identificar condiciones por las cuales hebras podran
necesitar para ejecutarse exitosamente en procedimientos
Identificar condiciones que se pueden producir en
procedimientos que podran necesitar otras hebras
Escribir los algoritmos
Ejemplo productor/consumidor
Identificar restricciones inherentes al problema
Las mismas que para el caso con semforos (el problema es el mismo)
Identificar datos a encapsular por monitor
Buffer, in, out, contador
Identificar procedimientos
Ingresar: llamado por productores, manipular in, buffer y contador en forma
exclusiva
Remover: llamado por consumidores, manipular out, buffer y contador en
forma exclusiva
Identificar condiciones de espera y sealizacin
Productor necesita esperar si buffer est lleno
Productor debe sealizar a consumidor despus de ingresar un elemento
(consumidor puede estar esperando por uno buffer estaba vaco)
Consumidor necesita esperar si buffer est vaco
Consumidor debe sealizar a productor despus de sacar un elemento de
buffer (productor puede estar esperando por posicin vaca)
Variables de condicin. Not_empty y not_full.
Productor espera por condicin not_full y sealiza condicin not_empty despues de
ingresar un elemento.
Consumidor espera por condicin not_empty y sealiza condicin not_full, despues
de sacar un elemento
Usando Monitores con
Productor/Consumidor
Monitor Producer_Consumer {
buffer items[N];
condition not_full, not_empty;
int count_items; // nmero de items en el buffer
int in, out;
Monitors de Hoare
if (not_ready)
wait(var_cond)
Monitors de Mesa
while(not_ready)
wait(var_cond)
Monitores de Mesa son ms fciles de usar
ms eficiente, menos cambios, soporta broadcast
directamente
Monitores de Hoare
condicin est garantizada de ser verdadera cuando
hebra que espera se ejecuta
Monitores en Java
Del tipo Mesa
Mtodos deben ser declarados con palabra clave
synchronized
Variables de condicin son annimas
Operaciones
wait() corresponde a wait(var_cond)
notify() corresponde a signal(var_cond)
despierta una hebra esperando por condicin. No
garanta de que sea la que h aesperado por ms tiempo
notifyAll() corresponde a broadcast(var_cond)
todas las hebras esperando condicin despiertan.
Cualquiera de ellas puede ejecutarse
Variables de Condicin y Mutex
Caso pthreads
Otra construccin
Variables de condicin pueden ser usadas con
mutexes
pthread_mutex_t mutex;
pthread_cond_t var_cond;
boolean ready;
void any(){
pthread_mutex_lock(&mutex);
if(!ready)
pthread_cond_wait(&var_cond, &mutex);
.
ready= TRUE;
pthread_cond_signal(&var_cond);
pthread_mutex_unlock(&mutex);
}
Resumen
Monitores de nivel ms alto que semforos
Permiten relacionar datos con primitiva de
sincronizacin
Un lock por monitor, hebras pueden salir entrar
de monitor temporalmente segn condiciones
Deben ser soportados por lenguaje de
programacin
Exclusin mutua garantizada por compilador
Aunque es posible usar locks y variables de
condicin
Menos flexible
Estructura de datos bien definida