1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
2.检测死锁并且恢复。
3.仔细地对资源进行动态分配,以避免死锁。
4.通过破除死锁四个必要条件之一,来防止死锁产生。
检测死锁的代价很大。所有的类unix系统包括Linux对死锁不作任何处理,这是因为基于成本的考虑.选择鸵鸟算法
让我来告诉你答案!设置状态变量lock=0,在占用资源的函数中,设置lock=1;并在处理结束后设lock=0.比如:
boollock=0
intscan()
{
while(lock!=0)//循环检测,直到资源释放才执行下面的语句
lock=1//锁定资源
...//具体的执行扫描的语句
lock=1//释放资源
return0
}
这个方法容易实现,但是占用CPU,假定其他线程正在占用扫描仪,那么这个线程就会在自己的时间片内不停的执行while语句直到对方释放扫描仪。由此造成了浪费。
现在流行的做法是通过中断信号来做,那是一本书的内容,建议看linux内核编程方面的书。
产生死锁的原因:一是系统提供的资源数量有限,不能满足每个进程的使用;二是多道程序运行时,进程推进顺序不合理。产生死锁的必要条件是:1、互斥条件;2、不可剥夺条件(不可抢占);3、部分分配;4、循环等待。
根据产生死锁的四个必要条件,只要使其中之一不能成立,死锁就不会出现。为此,可以采取下列三种预防措施:
1、采用资源静态分配策略,破坏"部分分配"条件;
2、允许进程剥夺使用其他进程占有的资源,从而破坏"不可剥夺"条件;
3、采用资源有序分配法,破坏"环路"条件。
死锁的避免不严格地限制死锁的必要条件的存在,而是系统在系统运行过程中小心地避免死锁的最终发生。最著名的死锁避免算法是银行家算法。死锁避免算法需要很大的系统开销。
解决死锁的另一条途径是死锁检测方法,这种方法对资源的分配不加限制,即允许死锁的发生。但系统定时地运行一个"死锁检测"程序,判断系统是否已发生死锁,若检测到死锁发生则设法加以解除。
解除死锁常常采用下面两种方法:1、资源剥夺法;2、撤消进程法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)