Professional Documents
Culture Documents
ÍNDICE GENERAL V
ÍNDICE DE FIGURAS XI
1 PROGRAMACIÓN CONCURRENTE 1
1.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Definición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Aplicaciones concurrentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1 Ventajas e inconvenientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.2 Aplicaciones reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.3 Problemas clásicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
V
Índice general
3 PRIMITIVAS DE SINCRONIZACIÓN 43
3.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2 Monitores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.2.1 Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.2.2 Definición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.2.3 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.2.4 Monitores en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.3 Variantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.3.1 Variante de Brinch Hansen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.3.2 Variante de Hoare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.3.3 Variante de Lampson y Redell . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4 INTERBLOQUEOS 71
4.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.2 Definición de interbloqueo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.2.1 Condiciones de Coffman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.2.2 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.4 Soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.4.1 Prevención . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.4.2 Evitación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
VI
Índice general
4.5 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5 BIBLIOTECA java.util.concurrent 93
5.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.2 Inconvenientes de las primitivas básicas de Java. . . . . . . . . . . . . . . . . . . 94
5.3 La biblioteca java.util.concurrent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.3.1 Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.3.2 Condition y monitores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.3.3 Colecciones concurrentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
5.3.4 Variables atómicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
5.3.5 Semáforos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
5.3.6 Barreras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.3.7 Ejecución de hilos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
5.3.8 Temporización precisa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8 COMUNICACIONES 167
8.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
8.2 Arquitectura en niveles (TCP/IP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
8.3 Llamada a procedimiento remoto (RPC) . . . . . . . . . . . . . . . . . . . . . . . 170
8.3.1 Pasos en una RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.3.2 Paso de argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
8.3.3 Tipos de RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
IX
Índice general
BIBLIOGRAFÍA 301