Documente Academic
Documente Profesional
Documente Cultură
1. Conceptos Básicos
3. Herramientas
• Funciona correctamente.
• La hebra B no tiene loops. Si termina notaB = 0.
• La solución tiene vivacidad y seguridad pero es:
X Compleja.
X Asimétrica: Códigos diferentes.
X Ineficiente: A produce espera ociosa.
X Falla ante un reordenamiento de instrucciones.
• Locks.
• Variables de Condición.
• Semáforos.
• acquire():
X Espera hasta que lock esté FREE.
X Cambia automáticamente a BUSY.
X Varias hebras esperando: A lo más una tiene éxito.
• release():
X Lock queda en estado FREE.
X acquire() pendientes: A lo más una tiene éxito.
Figure 5: TSQueueMain.cc
Figure 6: TSQueueMain.cc
Figure 7: TSQueueMain.cc
Figure 8: Librerı́as
Figure 9: Resultado
• wait(Lock *lock):
X Atómicamente libera el lock.
X Suspende la ejecución de la hebra que lo invoca.
X La hebra se va a una cola de espera asociada a la variable.
X Cuando despierta, adquiere el lock antes de retornar el wait.
• Para mover las hebras desde la cola de espera hasta la cola ready:
• signal():
X Solo una hebra.
• broadcast():
X Todas las hebras.
• v() / signal():
• Uso incorrecto:
X signal(mutex) ..... wait(mutex)
X wait(mutex) ....... wait(mutex)
X Omitir un wait(mutex) y/o un signal(mutex).
• Estos errores pueden llevar a deadlock y/o starvation.
• Los procesos puede que tengan que esperar mucho para obtener una
herramienta de sincronización.
• Espera indefinida viola las propiedades de progreso y espera acotada.
• Liveness: Propiedades de un SO moderno que aseguran el progeso
de los procesos.