数据库的死锁和活锁

出现死锁过程:

   事务T1封锁了数据R1 T2封锁了数据R2 T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁 接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁 这样T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁。

  四个条件缺一不可:互斥,占用且等待,不可强占,循环等待

    

 

 避免死锁,破坏其中一个条件即可

 

有死锁就有活锁,出现活锁过程:

       事务T1封锁了数据R 事务T2又请求封锁R,于是T2等待。 T3也请求封锁R,当T1释放了R上的封锁 之后系统首先批准了T3的请求,T2仍然等待。 T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求…… T2有可能永远等待,这就是活锁的情形

 

 

 避免活锁,采用先来先服务的策略

 

posted @ 2022-06-16 21:40  遇事不决,量子力学  阅读(602)  评论(0)    收藏  举报