`系统` 知识 | 青训营笔记

192 阅读1分钟

@[toc] 前言

学习链接 : b站视频链接

![在这里插入图片描述](img-blog.csdnimg.cn/7363babcb49… =x200)

并发 Bug 和应对

在这里插入图片描述

应对 Bug 的方法

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

在这里插入图片描述

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

并发 Bug:死锁 (Deadlock)

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

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

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

在这里插入图片描述

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

更多类型的并发 Bug

在这里插入图片描述

  • 顺序逻辑程序会被并发破坏的例子 : 在这里插入图片描述
  • 原子性还可能发生在 操作系统里 (下图 在执行check的时候 就进行破坏) 在这里插入图片描述

在这里插入图片描述

应对并发 Bug 的方法

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

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

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

-fsanitize=thread 检查数据竞争

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

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

在这里插入图片描述

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

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

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

总结

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

操作系统的状态机模型

在这里插入图片描述