Programas concurrentes necesitan algún tipo de comunicación entre los procesos. Hay dos razones principales:
En ambos casos hace falta un método de sincronización entre los procesos que quieren comunicarse entre ellos. Al nivel del programador existen tres variantes como realizar las interacciones entre procesos:
Con la sincronización condicional se protege un objeto (p.ej. un trozo de memoria) para que ningún otro proceso puede acceder el objeto hasta que este se encuentre en un estado permitido.
Los objetivos requeridos para la sincronización de procesos son normalmente:
La comunicación no tiene que ser síncrona en todos los casos. Existe también la forma asíncrona donde un proceso deja su mensaje en una estructura de datos compartida por los procesos. El proceso que ha mandado los datos puede seguir con otras tareas. El proceso que debe leer los datos lo hace en su momento.
Una comunicación entre procesos puede ser no fiable en todos los sistemas, existen varias posibilidades de fallos:
Existen técnicas para superar los problemas: