Sección crítica:
Una sección crítica es un fragmento de código o datos compartidos al que solo debe acceder un subproceso a la vez. Varios subprocesos que acceden a una sección crítica simultáneamente pueden provocar daños en los datos y un comportamiento impredecible.
Primitivas de sincronización:
Para sincronizar el acceso de subprocesos a secciones críticas, se utilizan varias primitivas de sincronización:
- mutex (bloqueos de exclusión mutua):un mutex se utiliza para bloquear un recurso compartido, permitiendo que solo un subproceso acceda a la sección crítica a la vez. Los subprocesos que intentan acceder a un recurso bloqueado se bloquean hasta que se desbloquea el mutex.
- semáforos:un semáforo es una variable utilizada para controlar el acceso a recursos compartidos. Contiene un número entero no negativo que especifica la cantidad de recursos disponibles. Los subprocesos disminuyen el semáforo antes de acceder a los recursos y lo incrementan cuando terminan.
- variables de condición:las variables de condición se utilizan junto con mutexes para gestionar subprocesos que esperan que ocurran eventos o condiciones específicas antes de continuar. Los subprocesos utilizan variables de condición para esperar hasta que se cumpla una determinada condición y luego continuar con su ejecución.
- variables atómicas:las variables atómicas proporcionan operaciones seguras para subprocesos en variables. Garantizan que todos los subprocesos que acceden a la variable vean el mismo valor al mismo tiempo.
- barreras:las barreras son puntos de sincronización donde los subprocesos esperan a que todos los subprocesos alcancen un punto específico en el código antes de continuar.
La sincronización de subprocesos tiene como objetivo garantizar que se acceda a los recursos compartidos de manera controlada, evitando condiciones de carrera y corrupción de datos, y garantizando un comportamiento consistente del sistema.