一、进程同步


二、进程互斥



即临界区能进则立即进入,不能进则等待,且是让出CPU的有限等待。
三、进程互斥的软件实现方法

1. 单标志法(违背空闲让进)


2. 双标志先检查(违背忙则等待)

3. 双标志后检查(违背空闲让进、有限等待)

4. Peterson算法(未达到让权等待原则)


5. 总结

四、进程互斥的硬件实现方法

1. 中断屏蔽方法(不适用于多处理机)

2. TestAndSet(TS指令/TSL指令,不满足让权等待原则)

3. Swap指令(XCHG指令,不满足让权等待原则)

4. 总结

五、信号量机制


1. 整型信号量

2. 记录型信号量


六、用信号量机制实现进程互斥、同步、前驱关系

1. 进程互斥

2. 进程同步


信号量机制实现进程同步,记住这个套路就可以了,对于一前一后的执行语句,在需要先执行的语句之后添加V(s)即signal语句(可以理解为先生产数据才能用V(S)释放资源),在需要后执行的语句之前添加P(s)即wait语句(可以理解为要使用数据,所以先执行P(s))
3. 进程的前驱关系
套路和上面的2个进程同步一样,只是这是复杂的更多进程同步而已。记住口诀:先执行语句之后执行V(s);后执行语句之前执行P(s)
4. 总结

七、管程
通过信号量可以实现进程的同步、互斥,但是信号量的编写困难复杂且容易出错,因此,我们提出了管程的概念,本质是对信号量机制的“封装”,将同步与互斥的复杂操作封装起来,程序员只需要调用简单的函数就能实现进程的同步与互斥,而不必再关注复杂的PV操作。
1. 管程的定义和基本概念

2. 拓展1:用管程解决生产者消费者问题


3. 拓展2:Java中类似于管程的机制

4. 总结

版权声明:本文为qq_34720818原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。