操作系统笔记八(信号量,管程)视频第十章

并发问题:竞争条件(多程序)
同步
原子操作是指一次不存在任何中断或失败的操作
信号量 sem 两个原子操作
P() sem减1
V() sem加1
信号量类似铁路:初始化2个资源控制信号灯
就是说允许两个通行
当进程进入临界区会执行P()操作
离开会执行V()操作

10.3 信号量的使用
P()会阻塞 V()不会阻塞
改变信号量只能通过PV操作
信号量的作用:互斥 条件同步

更复杂的同步互斥
要用计数信号量(二进制信号量不得)
比如:有界缓冲区的生产者-消费者问题
一个或多个生产者产生数据放在一个缓冲区里
单个消费者每次从缓冲区取出数据
在任何一个时间只有一个生产者或消费者可以访问该缓冲区
在缓冲区为空,消费者必须等待生产者
当缓冲区满 生产者必须等待消费者

10.4 信号量的实现
P操作 sem-- 如果小于0 就睡眠
V操作 sem++ 如果小于等于0 就说明在V操作前是小于0的 那么我们唤醒在等待的线程

10.5 管程
抽象概念
目的:分离互斥和条件同步的关注
包含:一个锁:指定临界区
0或者多个条件变量:等待/通知信号量用于管理并发访问共享数据

10.6 经典同步问题
读者-写者问题 读者:不需要修改数据 写者:读取和修改数据
允许同一时间有多个读者,但任何时候只有一个写者
当没有写者时读者才可以访问数据
当没有读者和写者时写者才可以访问数据

读者优先:就是说在等待进入的读者和写者,读者可以跳过写者先去读(因为读对数据没有破坏)而且在读者优先情况下只要有读者在执行就会源源不断接纳读者,阻塞写者

你负责可爱就行了,别看了让我来 操作系统让人丑陋,你已经不是小可爱了

写者优先:相反 只要是写者来,就优先满足

哲学家吃饭问题:这种解决
要么不拿,要么拿两把

你可能感兴趣的:(操作系统)