死锁:同步嵌套同步
D:\Documents\Desktop\1.jpg
死锁产生的条件
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
避免死锁
通过建立获取锁定的顺序,可以避免这种死锁。当所有线程始终按指定的顺序获取锁定时,即可避免这种死锁。
死锁原则
1.请勿尝试在可能会对性能造成不良影响的长时间操作(如 I/O)中持有锁。
2.请勿在调用模块外且可能重进入模块的函数时持有锁。
3.一般情况下,请先使用粗粒度锁定方法,确定瓶颈,并在必要时添加细粒度锁定来缓解瓶颈。大多数锁定都是短期持有,而且很少出现争用。因此,请仅修复测得争用的那些锁定。
4.使用多个锁定时,通过确保所有线程都按相同的顺序获取锁定来避免死锁。 |