学习操作系统P4 理解并发程序执行 (Peterson算法、模型检验与软件自动化工具)
啊
多一个线程,在状态机里也可以理解为多一个栈帧
啊
啊
啊
错误如下图所示
啊
啊
当只有一个人想上厕所时,只有一个旗子被举起来,因此举旗的人可以直接进厕所
当两个人都想上厕所时,看门上的名字可以判断谁先抢厕所,先抢厕所的人可以先使用厕所
啊
同时举旗时,手快的人贴的标签会被覆盖掉,从而让自己能够先进厕所
啊
啊
不好解释 Peterson 算法的正确性时,可以尝试枚举并发算法的状态机、或者是把这个算法写出来,用assert和计数器去判断
啊
啊
__sync_synchronize() 既是一个memory barrier(强制TLB flush),也是一个compiler barrier(防止编译器调换指令顺序)
啊
除了用纸和笔话并发程序的状态机以外,还可以使用程序自动画状态机
啊
啊
什么叫 model checker?
一个程序,可以遍历所有可能的、模型上的状态。
这一个150行的程序可以探索并发算法上所有可能的状态,只要状态空间不太大,就能用
啊
python中的关键字:yield
它可以让python代码“返回,但又不完全返回”
啊
使用 yield 关键字,可以很方便地在python中创建 状态机
啊
通过 yield 特性,我们可以创建两个 "线程",每次选一个线程执行一步
啊
model-checker 的原理如图所示
给要检查的算法的每一步语句后面都加上 yield checkpoint()
然后在外面包上一个 runner() 函数,接着探索每一种可能的执行状态
啊
python 中的 insepct 库可以把函数调用栈dump出来,还可以轻松获取程序的局部变量,这就是动态语言的魅力
啊
啊
啊
只要能为系统建立模型,就能用 brute force 证明正确/找到错误
把程序的正确性问题变成了一个图论问题
线程安全问题:critical section 每次最多只有一个线程
啊
liveness: 状态机,从任何状态出发,总能在优先步内到达 蓝色节点或者 绿色节点 (只有一个线程在crtical section 的状态)
livelock: 存在一个黑色节点,可以通过一个环回到自己 (对应情况:所有线程都在运行,但没有线程进入 critical section)
可以通过 强连通分量 解决这个问题
啊
总的来说,并发正确问题就是:红色节点是否可达?是否存在只经过黑色节点、只到自己的环路?
啊
啊
啊
啊
啊
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-03-02 python小技巧总结
2022-03-02 The Missing Semester of Your CS Education(第五课,命令行环境)笔记