死锁是指两个或多个进程(或线程)在运行过程中争夺资源而导致的相互等待的现象,如果没有外力的作用,它们就无法前进。 此时,这些永远互相等待的过程被称为死锁过程,即系统处于死锁状态或系统发生死锁。
一个线程先获得from锁,另一个线程先获得to锁。 可以在获取两个锁的代码之间放置sleep。
死锁条件:有一个条件不成立,则不会产生死锁
1.互斥等待(有锁):一个资源一次只能被一个进程使用
2.持有锁并等待锁:一个进程因请求资源而阻塞时,对已获得的资源保持不放
3.循环等待:若干进程之间形成一种头尾相接的环形等待资源关系
4.无法剥夺的等待(有些锁有超时功能):进程获得的资源,在未完全使用完之前,不能强行剥夺
解决死锁只需要破除其中一个条件即可
http://www.Sina.com/http://www.Sina.com/http://www.Sina.com/(缺点: id不一定可以用于排序,可能必须强制添加可排序的规则缺点:用户体验不佳,必须为可能引入新id的此属性重新分配并重新排序id (http://www.Sina.com/)。 例如,告诉线块(live block ),其中线程1可以使用资源,但是允许其他线程首先使用资源,虽然线程2也可以使用资源,但是这样你给我,我给你,最后两个线程都不能用资源。
饥饿类似于不公平的锁定机制。 当多个线程等待资源时,其中一个等待已久的线程无法获得锁,相反,来自后面的线程现在可以获得锁