找个会做网站的 一起做网站,网站建设与网页设计从入门到精通 pdf,苏州游玩攻略必去的地方,网站建设那家公司好解惑1#xff1a;
为使多个进程能互斥的访问某临界资源#xff0c;只须为该资源设置 一个互斥信号量 mutex#xff0c;初值为 1#xff08;代表临界资源只有一个#xff09; mutex初值为1.取值范围为[-1,0,1]
当mutex1时#xff0c;表示两个进程皆未进入需要互斥访问的…解惑1
为使多个进程能互斥的访问某临界资源只须为该资源设置 一个互斥信号量 mutex初值为 1代表临界资源只有一个 mutex初值为1.取值范围为[-1,0,1]
当mutex1时表示两个进程皆未进入需要互斥访问的临界区
当mutex0时表示有一个进程进入临界区运行另一个必须等待挂入阻塞队列
当mutex-1时表示有一个进程正在临界区运行而另一个进程因等待而阻塞在信号量队列中需要被当前已在临界区运行的进程在退出时唤醒。
mutex为0和为1的区别是为0的时候等待的进程没有申请该资源为-1的时候申请了即进行了P操作所以阻塞了。
解惑2
信号量的初值表示系统中资源的数目。
解惑3
empty代表空闲缓冲区的数量full代表产品的数量。
根据进程同步的前V后P。
缓冲区没满生产者才可以生产
缓冲区没空消费者才可消费。设置同步信号量full0emptyN。
从而画出下面的图 消费者消费产品非空闲缓冲区个数减一所以针对full是P操作。空闲缓冲区加一所以针对empty是V操作。
生产者生产产品使用一个空闲缓冲区所以空闲缓冲区减一所以针对empty是P操作但是非空闲缓冲区个数加一所以针对full是V操作。
那么为什么生产者消费者问题为什么不能用一个信号量实现同步
解释一
如果缓冲区满生产者是不能生产的所以生产者进程受到消费者进程的制约
如果缓冲区空消费者是不能消费的所以消费者进程受到生产者进程的制约
所以 需要两个同步信号量
解释二
首先假设只有一个同步信号量empty5也就是缓冲区有5个空位
生产者每次生产就申请一个空位即p(empty)。
假设5次生产之后满了临界区满了生产者不生产了现在生产者被阻塞cpu切换到消费者
消费者在每次消费成功后执行v(buffer)但是在消费前并没有受到任何制约这时候的效果就是消费者可以无限消费然后empty的值会无限增加消费者已经消费了刚才生产的5个产品之后都还可以继续消费。
或者假设现在有另一个同步信号量full0也就是缓冲区有0个产品但是不知道缓冲区有多大的限制。现在每次生产都在生产之后执行v(full)也就是full然而full可以一直增加因为没有上限也就是消费者被制约但是生产者没被制约。
2个信号量一个限制生产者一个限制消费者1个信号量无法同事限制他们2个。
解惑4
实现写优先代码 当顺序为读者1-写者1-读者2时
读者进程在读文件时发生进程调度写者进程执行此时写者进程阻塞在P(rw)中当再有读者进程2执行时会阻塞到P(W)中此时读者进程释放rw后写者进程最先被唤醒然后执行实现了先来先服务。