Mecanismos de sincronización13 temas

Mecanismos de sincronización

Cuando dos transacciones necesitan acceder al mismo recurso, el sistema debe decidir quién puede leer y quién puede escribir. Si no hay control, las escrituras simultáneas corrompen datos y las lecturas durante una escritura producen información inconsistente.


Cómo los tipos de lock controlan el acceso concurrente

La base de datos utiliza locks para decidir quién accede a un recurso y cómo. Cada uno existe para una necesidad distinta.

Los siguientes son mecanismos utilizados por la estrategia de control de concurrencia pesimista.

Shared Lock (S) — para lecturas concurrentes

Un shared lock permite que varias transacciones lean el mismo recurso al mismo tiempo, siempre y cuando no se intente modificar.

El S lock protege el recurso contra escrituras, garantizando que el dato no cambie durante la lectura.

Diagrama: shared lock — múltiples lecturas concurrentes, escritura bloqueada

Exclusive Lock (X) — para escrituras exclusivas

Un exclusive lock otorga a una transacción el acceso exclusivo a un recurso para modificarlo.

Mientras el X lock está activo, ninguna otra transacción puede leer ni escribir sobre ese recurso.

Diagrama: exclusive lock — acceso exclusivo, lecturas y escrituras bloqueadas

Matriz de compatibilidad

La compatibilidad determina si una transacción puede adquirir un lock cuando otro ya está presente sobre el mismo recurso:

Lock solicitado \ Lock actual S (shared) X (exclusive)
S (shared)
X (exclusive)

Shared y Exclusive locks en acción con SQL

Las siguientes simulaciones muestran el comportamiento de los locks con dos sesiones concurrentes.

Shared lock permite lecturas simultáneas

-- Sesión 1                       |  -- Sesión 2
BEGIN;                            |
SELECT * FROM cuentas             |
  WHERE id = 'A' FOR SHARE;       |
-- T1 adquiere S lock sobre A     |
                                  |  BEGIN;
                                  |  SELECT * FROM cuentas
                                  |    WHERE id = 'A' FOR SHARE;
                                  |  -- T2 adquiere otro S lock ✅
                                  |  -- ambas leen simultáneamente
COMMIT;                           |
                                  |  COMMIT;

Shared lock bloquea escritura

-- Sesión 1                       |  -- Sesión 2
BEGIN;                            |
SELECT * FROM cuentas             |
  WHERE id = 'A' FOR SHARE;       |
-- T1 tiene S lock sobre A        |
                                  |  BEGIN;
                                  |  UPDATE cuentas SET saldo=200
                                  |    WHERE id = 'A';
                                  |  -- T2 ESPERA X lock sobre A ❌
COMMIT;                           |
-- T1 libera el S lock            |
                                  |  -- T2 adquiere X lock y modifica
                                  |  COMMIT;

Exclusive lock bloquea todo acceso

-- Sesión 1                       |  -- Sesión 2
BEGIN;                            |
SELECT * FROM cuentas             |
  WHERE id = 'A' FOR UPDATE;      |
-- T1 adquiere X lock sobre A     |
                                  |  BEGIN;
                                  |  SELECT * FROM cuentas
                                  |    WHERE id = 'A' FOR SHARE;
                                  |  -- T2 espera S lock sobre A ❌
                                  |  -- ni siquiera puede leer
COMMIT;                           |
-- T1 libera el X lock            |
                                  |  -- T2 adquiere S lock y lee
                                  |  COMMIT;

Trade-offs entre concurrencia y protección

Enfoque Ventaja Desventaja
Shared Lock (S) Concurrente Permite alta concurrencia en lecturas Permisivo No protege contra escrituras concurrentes
Exclusive Lock (X) Aislado Garantiza aislamiento total sobre el recurso Bloqueante Bloquea todo acceso, reduce concurrencia

Errores frecuentes

Error: Un shared lock impide que otras transacciones lean el mismo dato.

Falso. El shared lock está diseñado precisamente para lo contrario: permite que múltiples transacciones lean simultáneamente. Lo que impide es que alguien modifique el dato mientras está siendo leído.


Error: Un exclusive lock permite que otros lean el dato, solo bloquea escrituras.

No. El exclusive lock bloquea tanto lecturas como escrituras. El nombre "exclusivo" significa que la transacción tiene acceso exclusivo total: nadie más puede tocar el recurso hasta que termine.

Autoevaluación: Mecanismos de Sincronización

1/3