对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造 成死锁。

死锁起因:

死锁是指两个或多个进程在执行过程中,由于竞争资源而造成的一种互相等待的现象,若无外力干涉,它们将一直等下去,不会再有任何进展,系统处于一种僵局状态。

死锁的四个必要条件:

  1. 互斥:一个资源只能被一个进程使用。
  2. 占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  3. 不可抢占:进程已获得的资源在未使用完之前,不能被其他进程强行夺走。
  4. 循环等待:若干进程之间形成一种头尾相接的循环等待关系。

解决方法:

  1. 预防死锁:通过避免死锁的四个必要条件,来防止死锁的发生。
  2. 避免死锁:当系统发现可能发生死锁时,采取措施阻止死锁的发生。
  3. 检测死锁:当系统发现已经发生死锁时,采取措施恢复系统。

在对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造成死锁。例如,进程 A 先锁表 A,再锁表 B,进程 B 先锁表 B,再锁表 A,则会发生死锁。

避免死锁:

  1. 使用乐观锁:乐观锁假设不会发生冲突,在更新数据时,不加锁,而是在提交更新时,检查是否有其他进程修改了数据,如果有,则回滚更新。
  2. 使用悲观锁:悲观锁假设会发生冲突,在更新数据时,先加锁,然后再更新数据。
  3. 使用两阶段锁协议:两阶段锁协议是一种避免死锁的算法,它将锁的申请分为两阶段:获取阶段和释放阶段。在获取阶段,进程可以申请多个锁,但不能释放任何锁;在释放阶段,进程必须释放它已获得的所有锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值