一、进程同步、进程互斥
二、进程互斥的软件实现方法
Peterson算法,如果不能进入执行会一直卡在while循环中,一直占用处理机。
三、进程互斥的硬件实现方法
四、信号量机制
p2进程完之后,value值+1变成了0,执行wakeup原语,唤醒P3进程。
p1执行完之后,value变成了1,大于0,不需要执行wakeup原语,p3还没执行完,将cpu交给他
最后回收打印机资源
五、用信号量实现进程的互斥、同步、前驱关系
六、生产者-消费者问题
若个进程不互斥,可能会造成数据覆盖。
可以将生产和消费放到临界区,但是会使代码冗杂,影响效率
七、多生产者多消费者问题
八、吸烟者问题
九、读者写者问题
当有一个读进程正在读,则rw=0,如果此时有一个写进程,其就会被阻塞在P(rw),由于count不等于0,可以直接跳过p(rw),所以当有源源不断地读进程,知道全部读进程完成。
分析最后一种情况,进行读者1,当读1之后,经过V(w)操作,写者1中的P(w)可以通过(w变成0),但是rw=0,所以写者1会被阻塞在P(rw)。当此时
读者2要来,但是此时w=0,所以读者2会被阻塞在P(w),这个时候只有读者1可以进行,读者1完成之后,count–,V(rw),rw=1,此时会唤醒写进程。只有当写者1完成之后,才会唤醒读者2
最后一种,先进行写者1,会使w=0,rw=0,会将读者1和写者2都堵塞,当读者1完成之后,会先进行读者1(因为读者在前),
十、哲学家进餐问题
情况1
当0拿起左手筷子时,2要进行,但此时mutex=0,所以会将2阻塞,知道0拿起右手筷子
情况2
哲学家0拿起左右筷子,此时进行了V(mutex),这时1要进行,但是1左手筷子被占用,这时就会造成阻塞,接下来2要进行,由于1进行时有p(mutex)还没有释放,2也会被阻塞。