Existen varias soluciones por software para laComunicación entre Procesos.
Variable de Cerradura

- Espera activa.
- El lock asegura exclusión mutua.
- Problema: dos procesos pueden acceder a la cerradura al mismo tiempo.
Algoritmo de Decker
- Primer intento: usa una variable de cerradura alternante (con un número para cada proceso).
- Segundo intento: levanta una señal luego de mirar la señal del otro proceso. Problema: dos procesos pueden entrar a su sección crítica a la vez.
- Tercer intento: levanta la señal antes de mirar las otras señales. Problema: los dos procesos pueden creer que el otro entró a su sección crítica, lo que provoca un interbloqueo.
- Cuarto intento: ahora baja la señal si la levantó pero ya habían otras levantadas. Problema: no asegura acceso a la sección crítica en un tiempo finito.
Algoritmo de Peterson

- Usa la señal de Decker junto a una variable de cerradura que representa el “turno” para el siguiente proceso.
- Cumple con todas las condiciones para ser una solución efectiva.
- Mantiene la espera activa (desventaja).
Otras Estrategias
Dormir y Despertar

Un hilo productor escribe a un buffer y se duerme cuando ese buffer se llena. Otro hilo consumidor se despierta cuando hay algo en el buffer para leer. Este enfoque separa responsabilidades: un hilo escribe y el otro hilo lee.
Semáforos
Un semáforo permite al consumidor y productor ejecutarse de forma concurrente.

- Variables: full (entradas ocupadas), empty (entradas libres), mutex (cerrojo).
- Operaciones: DOWN: si el semáforo es mayor a cero, entonces se decrementa y sigue. Sino, se duerme. UP: incrementa el valor del semáforo.
Monitores
Es un concepto específico al lenguaje de programación. Los compiladores o runtimes no permiten que un proceso entre al monitor si existe otro en él (concepto mutex). El monitor tiene dos variables (wait y signal) y una cola de procesos en espera.

Paso de Mensajes
El paso de mensajes es útil para entornos distribuidos o de múltiples procesadores. El esquema básico es el siguiente:
flowchart LR; 1[Emisor] --> 2[Canal] --> 3[Receptor]
El direccionamiento puede ser:
- Directo-simétrico: se establece una conexión donde ambos procesos se conocen.
- Directo-asimétrico: una conexión única en la cual solo el emisor conoce al receptor.
- Indirecto: los mensajes se envían a y son leídos de colas o buzones.
- Buzones: dos procesos se comunican si comparten un buzón del Sistema Operativo.
- Puertos: para que muchos emisores envíen a un receptor.