【南京大学操作系统(蒋炎岩)】(五) 并发 Bug 和应对

【南京大学jyy操作系统】()


前言

学习链接 : 链接点击跳转

在这里插入图片描述

并发 Bug 和应对

在这里插入图片描述

应对 Bug 的方法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 更实在的方法:防御性编程
    在这里插入图片描述
  • 并发量少的情况 可能是对的 ,当时量多的时候就不一定了!
  • 面试 assert !! 加分项
  • 操作系统内核部分 完全是裸c 也就是你写的错误 它是不会告诉你的
  • 虽然c灵活 , 但是安全隐患很低
  • 在这里插入图片描述

并发 Bug:死锁 (Deadlock)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
避免死锁
在这里插入图片描述

并发 Bug:数据竞争 (Data Race)

在这里插入图片描述

  • 当俩个进程同时在一块内存是 读写 or 写写 就可能发生数据竞争 , 谁快就是谁的
    在这里插入图片描述
  • 这样就不会导致并发了
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
  • 最简单的方法 : 比如在实现栈 、 队列 、平衡树的时候 , 在操作数据的时候 , 使用一把锁 , 写 lock , 结束 unlock
    在这里插入图片描述

更多类型的并发 Bug

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

应对并发 Bug 的方法

  • best way is use tool to test!!
    在这里插入图片描述

  • 宏定义
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 一个点到另外一个点如果有路径,那么他们就不存在数据竞争,反之存在数据竞争.
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

-fsanitize=address 检查非法访问 gcc 选项 (such memory error)

在这里插入图片描述
在这里插入图片描述

-fsanitize=thread 检查数据竞争

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • canary : 牺牲
    在这里插入图片描述

在这里插入图片描述

  • vs 里面的烫烫烫
    在这里插入图片描述
    在这里插入图片描述

检查内存分配器
在这里插入图片描述

  • malloc() 的时候设置为红色
    在这里插入图片描述

总结

  • 检查检查再检查!!
    在这里插入图片描述

操作系统的状态机模型

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49486457/article/details/127791748