Los lenguajes de programación y los sistemas operativos, nos proporcionan primitivas de sincronización que facilitan la interacción entre procesos de forma sencilla y eficiente.
Una primitiva, hace referencia a una operación de la cual conocemos sus restricciones y efectos, pero no su implementación exacta. Veremos que usar esas primitivas se traduce en utilizar objetos y sus métodos, teniendo muy en cuenta sus repercusiones reales en el comportamiento de nuestros procesos.
Clasificaremos las interacciones entre los procesos y el resto del sistema (recursos y otros procesos), como estas tres:
- Sincronización: Un proceso puede conocer el punto de ejecución en el que se encuentra otro en ese determinado instante.
- Exclusión mutua: Mientras que un proceso accede a un recurso, ningún otro proceso accede al mismo recurso o variable compartida.
- Sincronización condicional: Sólo se accede a un recurso cuando se encuentra en un determinado estado interno.
Un tipo de dato del cual conocemos sus restricciones y efectos, pero no su implementación exacta. Usar esas primitivas se traduce en utilizar objetos y sus métodos, teniendo muy en cuenta sus repercusiones reales en el comportamiento de nuestros procesos.