Directorio de artículos
Punto muerto
- El llamado punto muerto son las cuatro condiciones necesarias que deben ocurrir en el siguiente
- Condiciones de exclusión mutua de recursos
- Mantener y solicitar condiciones
- Condición inalienable
- Condición de espera de bucle
- En definitiva, los recursos a los que se accede son mutuamente excluyentes, es decir, son recursos no preferentes o consumibles.
- Varias transacciones ya han ocupado recursos y desean obtener otros recursos, los recursos ocupados son inalienables y los recursos a los que desea acceder se ciclan y esperan
- Por ejemplo, el siguiente ejemplo
Construye una mesa
CREATE TABLE `test1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
- id índice de clave primaria
Cliente uno
--T1时刻
BEGIN;
--行级锁 id=1 的记录
select * from test1 where id=1 for update ;
--T3时刻
--更新 id=2 的记录
update test1 set id=5 where id=2;
Cliente dos
--T2时刻
BEGIN;
--行级锁 id=2 的记录
select * from test1 where id=2 for update ;
--T4时刻
--更新 id=1 的记录
update test1 set id=6 where id=1;
- resultado de la operación
update test1 set id=5 where id=1
> 1213 - Deadlock found when trying to get lock; try restarting transaction
> 时间: 0.002s
análisis
La terminal 1 agrega un bloqueo exclusivo al registro con id = 1 en la tabla test1 en el momento T1
La terminal 2 agrega un bloqueo exclusivo al registro de id = 2 en la tabla test1 en T2
El terminal actualizará el registro con id = 2 en la tabla test1 en el momento T3. En este momento, el registro de fila se ha agregado con un bloqueo exclusivo y no se puede realizar la operación de actualización. Necesita esperar el bloqueo para ser lanzado.
La terminal 2 actualizará el registro con id = 1 en la tabla test1 en el momento T4. En este momento, el registro de fila se ha agregado con un bloqueo exclusivo y no se puede realizar la operación de actualización. Debe esperar el bloqueo para ser lanzado.
...
Las dos transacciones esperan a que se libere el bloqueo exclusivo de la otra, por lo que se produce un interbloqueo