Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sincronización en los procesos de programación concurrente sincronnización
Sincronización en los procesos de programación concurrente
Mecanismos de sincronización
Deben emplearse, si el programador considera que la frecuencia de acceso a un recurso compartido es baja, es decir, que supone que la probabilidad de coincidencia de dos o más procesos al recurso compartido es baja
Ventaja
Este tipo de mecanismo nos ofrece un mayor grado de paralelismo, por tanto, una mayor tasa de transferencia, siempre que se emplee en una situación donde
la frecuencia de concurrencia sea baja.
Tuberías
Es un mecanismo de comunicación y sincronización
Tuberías sin nombre (pipe) Solo el proceso que la crea y sus descendientes pueden utilizarla
Tuberías con nombre (FIFO) Para los procesos que no guardan ninguna relación de parentesco. Conceptualmente cada proceso ve a la tubería como un conducto con dos extremos, uno para insertar y otro para extraer datos de la tubería
Ejemplo:
read(fildes[0], buffer, n)
– Pipe vacío se bloquea el lector
– Pipe con p bytes
Si p ≥ n devuelve n
Si p < n devuelve p
– Si pipe vacío y no hay escritores devuelve 0
write(fildes[1], buffer, n)
– Pipe lleno se bloquea el escritor – Si no hay lectores se recibe la señal SIGPIPE
Semáforos
Se utilizan generalmente en sistemas con memoria compartida
Sirven para asegurar la exclusión mutua
Es un objeto con un valor entero Se le puede asignar un valor inicial no negativo
Ejemplo:
1 # Antes de lanzar los hilos
2 senal = Semaphore(0)
3
4 def envia_datos():
5 calcula_datos()
6 senal.acquire()
7 envia_por_red() 21
8
9 def prepara_conexion():
10 crea_conexion()
11 senal.release()
Mutex y variables condicionales
Mutex Son mecanismos de sincronización especiales para hilos.
Mutex. Es un semáforo binario con dos operaciones atómicas
lock(m) Intenta bloquear el mutex, si el mutex ya está bloqueado el hilo se suspende.
unlock(m) Desbloquea el mutex, si existen procesos bloqueados en el mutex se desbloquea uno.
Variables condicionales. Son variables de sincronización asociadas a un mutex Conviene ejecutarlas entre un lock y unlock Dos operaciones atómicas
Paso de mensajes
Útiles cuando se necesita comunicar y sincronizar procesos que se ejecutan en máquinas distintas.
Permiten resolver: Exclusión mutua
Sincronización entre un proceso que recibe un mensaje y otro que lo envía.
Ejemplo:
send(P,mensaje)- envía mensaje a P
receive(Q,mensaje)-recibe mensaje de Q
Candados
Aseguran la exclusión mutua al permitir el acceso único a una sección crítica
Protege los recursos compartidos cuando acontecen varios intentos de acceso sobre ese recurso
Ejemplo:
cerrar el candado (lock)
y abrir el candado
(unlock)
Monitores
Es una construcción de alto nivel para sincronización.
Es mas fácil de controlar que los semáforos.
Se implementan como biblioteca de programas.
Ejemplo:
Tipo nombre-monitor = monitor; Declaración de variables Procedure entry P1(...);
Begin...end;
.... Procedure entry Pn(...);
Begin...end;
Begin
Código inicialización
End