进程和程序:程序想但与一个食谱,而进程就是依照该食谱做的事物
竞争条件:假如现在有一个水桶,然后甲,乙俩个人都想往这个水桶中存入东西,首先轮到甲这个人存入东西,然后甲往这个人往水桶中存入了红酒,然后现在甲使用这个水桶的时间到了,然后乙使用这个水桶,然后乙把水桶中的红酒倒掉然后装进去葡萄酒,这就是好比竞争条件。
临界区:对共享内存进行访问的程序片段成为临界区
实现互斥的几种方式:
关中断:进入临界区关中断,关中断之后时钟中断也被屏蔽,时钟中断被关闭后cpu也无法进行进程的切换所以其他进程就不会进入临界区,这种方式不好因为把关中断的权利交给了用户进程是不明确的
锁变量:假如有一个初始变量,开始为0,表示可以进入临界区,进入临界区之后将变量置为1,然后离开临界区之后变量初始化为0,其他进程就可以进去临界区,但是有一个问题就是,如果你在把变量初始化为1之前,有一个进程进入临界区,这样临界区就有俩个进程同时共享内存变量
消费者生产者问题:
缓冲区满时然后生产者睡眠,然后有消费者从缓冲区取出数据时,那么唤醒生产者继续生产数据,反过来,当缓冲区空的时候,消费者睡眠,当生产着生产数据之后唤醒消费者。也有可能出现竞争条件,就是如果现在缓冲区为空,那么消费者检查缓冲区的大小为0,这时候程序决定暂停消费者,开始运行生产者,那么生产者产生一个数据,这时候生产者以为消费者睡眠,就会向消费者发送一个唤醒信号,但是消费者只是暂停并不是睡眠,然后唤醒信号丢失,当消费者下次运行时测试先前的缓冲区容量,发现还是空的,于是就去睡眠了,这样当缓冲区存满之后生产者也睡眠了,那么生产者消费者都睡眠了
信号量:
新的变量类型,用于记录唤醒操作的数目
信号量解决消费者生产者问题
其中empty记录空的缓冲槽数量,mutex用来表示生产者消费者同时访问缓冲区,full用于记录满的缓冲槽数目有如下程序
网友评论