锁死处理
多个进程同时触发,交替执行处理不好就会发生死锁
先执行 mutex 再执行 empty 用户可能这么做
假设一下mutex初值等于1,empty初值为0
生产者 p(mutex) mutex=0,p(empty) empty=-1,导致阻塞.
消费者 p(mutex) mutex=-1,导致阻塞
生产者需要p(empty)唤醒,就需要消费者执行v(empty),需要消费者执行v(empty),就需要唤醒消费者的p(mutex),由于无法执行消费者的v(mutex),就需要执行生产者的v(mutex),但是要执行生产者的v(mutex),就需要唤醒生产者的p(empty),这样就会导致死锁
Allocation当前进程的资源,Need当前经常资源需要的资源,当前Availabe可用的资源
执行顺序 p1 p3 p2 p4 p0
p1执行完后返回资源,当前资源变为 5 3 2
p3执行完后返回资源,当前资源变为 7 4 3
p2执行完后返回资源,当前资源变为 10 4 5
p4执行完后返回资源,当前资源变为 10 4 7
p0执行完后返回资源,当前资源变为 10 5 7
判断Need<=Work,Work=Work+Allocation[i]将当前资源累加到当前可用资源,Finish[i]=true,释放当前资源
模拟一下,看一下同意了这个申请之后,是否会造成死锁,如果会造成死锁就拒绝申请.