【南京大学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()
的时候设置为红色
总结
- 检查检查再检查!!