{ "version": "2", "formats": { "markdown": { "content": "## Page 1\n\nUnidad 1\nProgramación concurrente\n\nTema 3 Dependencias de estados\n\n<page_number>1</page_number>\n\n---\n\n\n## Page 2\n\n# Contenidos\n\n1. Dependencias de estado\n2. Cómo enfrentarse a fallos\n * Excepciones\n * Cancelación\n3. Métodos protegidos\n * Suspensión protegida\n * Funcionamiento del monitor\n * Esperas con protección y notificaciones\n * Más tipos de esperas y notificaciones\n * Uso de bibliotecas\n4. Patrones de diseño concurrentes\n * Productor – Consumidor\n * Bloqueo de lectura y escritura\n5. Bibliografía\n\n<page_number>2</page_number>\n\n---\n\n\n## Page 3\n\n# Dependencias de estado\n\n* Para realizar cualquier acción (ej: tomar nota de un mensaje telefónico) se precisa dos condiciones:\n * **Externas**: un objeto recibe un mensaje que solicita la realización de la acción\n * **Internas**: el objeto se encuentra en el estado adecuado para realizar la acción\n* Las técnicas de **exclusión** preservan los **invariantes del objeto** ... el control de concurrencia **dependiente del estado** impone problemas adicionales relativos a las **precondiciones y postcondiciones**\n* Las acciones pueden tener precondicones que no siempre se cumplen y postcondiciones que no siempre se pueden alcanzar\n\n
| Suena el teléfono | \nTengo bolígrafo | \nNo tengo bolígrafo | \n
| Tomar el mensaje | \nResponder al teléfono | \nResponder al teléfono | \n
| \n | Escribir el mensaje | \n???? | \n
| Estado | \nCondición | \ninc() | \ndec() | \n
|---|---|---|---|
| superior | \ngetValor() == MAX | \nno | \nsí | \n
| medio | \nMIN < getValor() <MAX | \nsí | \nsí | \n
| inferior | \ngetValor() == MIN | \nsí | \nno | \n
| Estado | \nCondición | \ninc() | \ndec() | \n
|---|---|---|---|
| superior | \ngetValor() == MAX | \nno | \nsí | \n
| medio | \nMIN < getValor() <MAX | \nsí | \nsí | \n
| inferior | \ngetValor() == MIN | \nsí | \nno | \n
| \n 1. Notificar que productor no está preparado \n 2. Efectuar cálculos que produzcan un valor de x \n 3. Notificar que productor está preparado \n 4. Esperar a que el consumidor esté preparado \n 5. Pasar x al consumidor\n | \n \n 1. Notificar que consumidor está preparado \n 2. Esperar a que el productor esté preparado \n 3. Obtener x del productor \n 4. Notificar que consumidor no está preparado \n 5. Efectuar un cálculo que utiliza el valor de x\n | \n