Identificación de Patrones de Concurrencia: Resolución de Problemas

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,19 KB

Chuleta de Identificación de Patrones de Concurrencia

OBJETIVO: En 1-2 minutos, antes de escribir nada, responde a estas 3 preguntas:

  • A) ¿Qué mecanismo pide o conviene?
  • B) ¿Qué patrón base se parece?
  • C) ¿Qué variables o semáforos necesito?

A) Mecanismo: Pistas del enunciado

  • Semáforos: "Resuélvalo con semáforos" o no especifica nada.
  • Monitores: "Resuélvalo con monitores" o "variables de condición" (pseudocódigo o Java).
  • Java: synchronized + while + notifyAll.
  • Ada: "Tareas", "rendezvous".
    • Citas (task + accept + select): Si hay un gestor/servidor que decide y responde a peticiones distintas.
    • Protected (entry when): Si es solo proteger datos compartidos con límite/contador, sin lógica de decisión.

B) Patrones base

Los siguientes 5-6 patrones cubren casi todos los escenarios:

1. Productor/Consumidor (Buffer con capacidad)

Pistas: "Buffer", "almacén", "cola con capacidad N", "deposita/coge", "olla con N raciones".
Idea: Recurso contable con condiciones "está lleno" / "está vacío".
Mapeo: elementos (cuántos hay) y espacios (huecos restantes).

2. Lectores/Escritores (Acceso concurrente vs. exclusivo)

Pistas: "Varios pueden X a la vez, pero si alguien hace Y debe ser el único", "base de datos".
Idea: Un proceso admite concurrencia, el otro necesita exclusividad total.

3. Aviso mutuo / Despertar (Barbero-like)

Pistas: "Duerme hasta que alguien lo necesite", "avisa a X y X responde".
Estructura: A hace signal(aviso_a_B) y wait(respuesta_de_B); B hace wait(aviso_a_B) y signal(respuesta_de_B).

4. Barrera / Sincronización de grupo

Pistas: "Hasta que se junten N", "cuando hayan llegado todos", "capacidad C".
Idea: Un coordinador da N permisos y espera al último participante.

5. Recursos múltiples compartidos (Riesgo de interbloqueo)

Pistas: "Necesita 2 o más recursos a la vez", "cada uno comparte herramientas con otros".
Solución: Orden fijo, jerarquía al pedir recursos o monitor que reserva "todo o nada".

6. Recurso contado simple

Pistas: "N unidades de tipo A, M de tipo B".
Idea: 1 semáforo contador por tipo.

7. Servidor/Gestor que arbitra peticiones (Típico Ada)

Pistas: "Gestor/encargado recibe peticiones y decide".
Idea: 1 task con varias entry y select con guardas.

C) Tabla rápida: Sustantivo a variable

  • Capacidad máxima N: Semáforo espacios = N.
  • X disponibles: Contador compartido + semáforo elementos.
  • Solo uno puede usar Y: Semáforo binario mutexY = 1.
  • X espera a Y: Par de semáforos a 0.
  • Interbloqueo: Patrón filósofos (cuidado con el orden de los waits).

D) Proceso de 90 segundos

  1. Subraya: Recursos, roles y límites numéricos.
  2. Pregunta: ¿Qué patrón encaja mejor?
  3. Mapea: Sustantivos a variables (Tabla C).
  4. Declara: Escribe semáforos/condiciones con valores iniciales.
  5. Copia: Plantilla del patrón y sustituye nombres.
  6. Revisa: Exclusión mutua, interbloqueo e inanición.

E) Si no encaja en ningún patrón

Probablemente sea una combinación de patrones. Divide el enunciado en subproblemas independientes, resuelve cada uno y únelos. Es normal tener varios mutex si protegen recursos distintos.

Entradas relacionadas: