- 将赋给(将内存中的内容加载到寄存器中)
- 将寄存器中的内容存到内存中,将中的内容存到这个里面(此时具有了的值)
- 为note贴上标签,指定是谁留下的纸条,仍然会出现问题,当进程A留下标签后,切换到进程B,也会留下标签,此时结果就是都没有买面包
- 只允许一个进程去访问临界区的代码,这个代码主要对一起共享的资源进行读操作或写操作,如果有一个程序在临界区执行了,其他程序就需要等地
- 确保只有一个程序在临界区叫互斥
??5. 临界区
- : 同一时间临界区中最多存在一个线程
- : 如果一个线程想要进入临界区,那么它最终会成功
- : 如果一个线程i处于入口区,那么在i的请求被接受之前,其他线程进入临界区的时间是有限制的
- : 如果一个进程在等待进入临界区,那么在它可以进入之前会被挂起
??5.1 方法1:禁用硬件中断
-
没有中断,没有上下文切换,因此没有并发
- 硬件将中断处理延迟到中断被启用之后
- 大多数现代计算机体系结构都提供指令来完成
-
进入临界区
- 禁用中断
-
离开临界区
- 开启中断
缺点
- 对于多CPU是有限制的,因为一个CPU执行屏蔽中断时,他只会中断它自己的,并不会中断其他CPU的中断,其他CPU还是会继续执行
- 将flag[i]=1,放在前面,此时满足互斥但是存在死锁
-
如果临界区很短,则使用忙等待,不需要进行上下文切换,上下文切换开销相对大
-
如果临界区很长,开销远远大于上下文切换,选择无忙等待
- 适用于单处理器或者共享主存的多处理器中任意数量的进程
- 简单并且容易证明
- 可以用于支持多临界区
- 忙等待消耗处理器时间
- 当进程离开临界区并且多个进程在等待的时候可能导致饥饿
-
- 如果一个低优先级的进程拥有临界区并且一个高优先级进程也需求,那么高优先级进程会获得处理器并等待临界区(使得高优先级进程忙等待,使得低优先级进程无法释放锁)
-
锁是更高等级的编程抽象
-
常用的三种实现方法
-
可选的实现内容:
问题
解决办法1:使用
解决办法2:使用
优点
缺点
??6. 总结
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92454 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!