自用OS-001

同步和互斥的基本概念

就 比如ABC  同步我可以认为是C必须在AB干完之后 互斥A B不能同时进行

生产者和消费者

信号量

empty :表示内部还有多少缓存。

full:表示消费者当前还有多少商品可以使用。

注意信号量不能直接赋值。生产者消费者问题是典型的单生产者单消费者问题,我们定义生产者的进程为s1 消费者的进程为s2,

讲解

生活中有很多这样的例子,我们访问一个网页的前提是服务器提前把网页放进去。我们读取内存的前提是磁盘向我们的缓冲区放了一些内容。

自用OS-001_第1张图片

自用OS-001_第2张图片

  •  上边这个情况下empty = 0 表示没有空闲的区域留存给生产者生产。
  • 下边是empty = 1的情况,表示可以有一个空闲的位置给生产者。
  • empty = -1表示欠他一个空间 生产了 但是没有地方放,或者是说有一个进程正在等待
while(1){//生产者
    empty--;
    if(empty < 0){
        sleep(s1.queque)
    /*
        其他代码
    */

}

如果发现empty < 0的话表示没有地方给任务用了,那么进程就会陷入阻塞状态,emtpy =

你可能感兴趣的:(#,算法设计与分析,操作系统,同步互斥)