【9. 同步与互斥】

【9. 同步与互斥】
  • 将赋给(将内存中的内容加载到寄存器中)
  • 将寄存器中的内容存到内存中,将中的内容存到这个里面(此时具有了的值)

【9. 同步与互斥】
【9. 同步与互斥】

【9. 同步与互斥】
【9. 同步与互斥】

??4. 一些概念(Part 3)

  • 为note贴上标签,指定是谁留下的纸条,仍然会出现问题,当进程A留下标签后,切换到进程B,也会留下标签,此时结果就是都没有买面包

【9. 同步与互斥】
设置不同的控制逻辑
【9. 同步与互斥】
  • 只允许一个进程去访问临界区的代码,这个代码主要对一起共享的资源进行读操作或写操作,如果有一个程序在临界区执行了,其他程序就需要等地
  • 确保只有一个程序在临界区叫互斥

【9. 同步与互斥】

??5. 临界区

  • : 同一时间临界区中最多存在一个线程
  • : 如果一个线程想要进入临界区,那么它最终会成功
  • : 如果一个线程i处于入口区,那么在i的请求被接受之前,其他线程进入临界区的时间是有限制的
  • : 如果一个进程在等待进入临界区,那么在它可以进入之前会被挂起

??5.1 方法1:禁用硬件中断

  • 没有中断,没有上下文切换,因此没有并发

    • 硬件将中断处理延迟到中断被启用之后
    • 大多数现代计算机体系结构都提供指令来完成
  • 进入临界区

    • 禁用中断
  • 离开临界区

    • 开启中断

缺点

  • 对于多CPU是有限制的,因为一个CPU执行屏蔽中断时,他只会中断它自己的,并不会中断其他CPU的中断,其他CPU还是会继续执行
  • 【9. 同步与互斥】
    • 进程1和进程2只能交替进行,一旦有一个程序退出,那么另一个程序下次还想进入临界区,那么它一直等待,一直进不去
      【9. 同步与互斥】
      • 将flag[i]=1,放在前面,此时满足互斥但是存在死锁

      【9. 同步与互斥】

      问题

      【9. 同步与互斥】

      解决办法1:使用

      • 如果临界区很短,则使用忙等待,不需要进行上下文切换,上下文切换开销相对大

      • 如果临界区很长,开销远远大于上下文切换,选择无忙等待

        【9. 同步与互斥】

      解决办法2:使用

      优点

      • 适用于单处理器或者共享主存的多处理器中任意数量的进程
      • 简单并且容易证明
      • 可以用于支持多临界区

      缺点

      • 忙等待消耗处理器时间
      • 当进程离开临界区并且多个进程在等待的时候可能导致饥饿
        • 如果一个低优先级的进程拥有临界区并且一个高优先级进程也需求,那么高优先级进程会获得处理器并等待临界区(使得高优先级进程忙等待,使得低优先级进程无法释放锁)

      ??6. 总结

      • 锁是更高等级的编程抽象

      • 常用的三种实现方法

      • 可选的实现内容:

      文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92454 人正在系统学习中

      来源:小呆鸟_coding

      声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年8月3日
下一篇 2022年8月3日

相关推荐