La concurrencia es la simultaneidad de hechos. Un programa concurrente es aquel en el que ciertas unidades de ejecución internamente secuenciales (
procesos∞ o
threads∞), se ejecutan paralela o simultáneamente.
Existen 3 formas básicas de interacción entre procesos concurrentes:
- Comunicación (p.e. uso de memoria compartida).
La concurrencia o procesamiento paralelo se ha implementado en leguajes de programación de distinta manera:
- Programación concurrente clásica: se basa en la utilización de variables compartidas. Es el caso de Modula-2∞ o Concurrent Pascal. Para ello, se emplean herramientas como semáforos, regiones críticas∞ y monitores.
- Programación concurrente distribuida: se basa en la transferencia de mensajes entre los procesos o threads. Es el caso de C∞/POSIX∞, Occam∞ o Ada. Se emplean herramientas como canales, buzones y llamadas a procedimiento remoto.
En
Ada se emplea una programación concurrente distribuida y la principal forma de sincronizar las unidades de ejecución, conocidas como
tareas∞, son los puntos de entrada a la tarea o citas.