- 3
- 0
- 约5.18千字
- 约 46页
- 2017-06-13 发布于湖北
- 举报
生产者与消费者 两个进程共享缓冲区 生产者进程只要发现缓冲区不满,就填充数据 消费者进程只要发现缓冲区内有数据,就向外取 生产者与消费者 公共变量 counter 用来记录当前缓冲区中数据个数 生产者填充数据后,执行 counter ++ 消费者取出数据后,执行 counter -- 生产者与消费者 两个进程并发,经打断和调度后,底层的指令乱序执行 执行前counter 的值是5 执行完成后,生产者进程出错: counter ++ 得到了4 若T4和T5的执行顺序调换一下,消费者进程出错:counter -- 得到了6 生产者与消费者 多个进程并发操作公共变量 公共变量的结果取决于执行顺序,出现竞争 并发时执行顺序不确定 解决办法:使得同时只有一个进程访问公共变量 进程同步或协调使得运行结果不会互相干扰 临界区问题 临界区代码:修改公共变量,更新表格,写文件…... 一个进程进入临界区执行时 其它进程不能进入临界区 内核内部:打开文件列表 非抢占式内核不严重: winxp,win2000 抢占式内核问题严重:linux, solaries 解决办法应满足 互斥 前进 有限等待 软件解决办法 i 和 j 两个进程共享变量 turn 表示允许进程进入临界区 flag[t] 为真表示进程 t 准备进入 思想:两个进程互相谦让,先 谦让的先行,后让者后走
原创力文档

文档评论(0)