本文共 486 字,大约阅读时间需要 1 分钟。
直接看图:
下面这张图堪称神奇:
问题描述–>套娃行为
信号量为了时临界区问题不发生忙等待,使用临界区mutex进行处理。临界区mutux的value需要被P1和P2的wait()指令进行操作,然而能否保证对mutex.value进行互斥的操作是一个问题。wait()操作理论上是需要原子的(atomically),实际上是有一些代码构成,实现起来并不能保证互斥。这就产生了mutex.value访问控制的问题。也就产生了CS1’和CS2‘。 保证互斥的算法有以下: 1、硬件指令 TestAndSet Swap
会发生忙等待 2、开关中断
忙等待切只适用于单处理系统 3、paterson算法 面包店bakery算法等
也有忙等待 由此可见 ,信号量解决进程互斥的时候忙等待不可避免。 使用信号量的目的一个时因为方便简单,另一个就是能够解决忙等待问题
。
那么为什么使用信号量,是因为图中对用户进程P1和P2的共享数据S进行忙等待处理的效率比较低,而操作系统的临界区的忙等待的时间比较短,效率高。而且适当的忙等待并非无益(多处理机下,和进程的context上下文切换有关)。
转载地址:http://smgwi.baihongyu.com/