学习操作系统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)
可以通过 强连通分量 解决这个问题
啊

总的来说,并发正确问题就是:红色节点是否可达?是否存在只经过黑色节点、只到自己的环路?
啊

啊

啊

啊

啊
学习操作系统P4 理解并发程序执行 (Peterson算法、模型检验与软件自动化工具)的更多相关文章
- 微信小程序开发:学习笔记[7]——理解小程序的宿主环境
微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器
- 从操作系统层面理解Linux下的网络IO模型
I/O( INPUT OUTPUT),包括文件I/O.网络I/O. 计算机世界里的速度鄙视: 内存读数据:纳秒级别. 千兆网卡读数据:微妙级别.1微秒=1000纳秒,网卡比内存慢了千倍. 磁盘读数据: ...
- Java程序执行过程及内存机制
本讲将介绍Java代码是如何一步步运行起来的,其中涉及的编译器,类加载器,字节码校验器,解释器和JIT编译器在整个过程中是发挥着怎样的作用.此外还会介绍Java程序所占用的内存是被如何管理的:堆.栈和 ...
- 并发刺客(False Sharing)——并发程序的隐藏杀手
并发刺客(False Sharing)--并发程序的隐藏杀手 前言 前段时间在各种社交平台"雪糕刺客"这个词比较火,简单的来说就是雪糕的价格非常高!其实在并发程序当中也有一个刺客, ...
- Android入门学习:Android 系统框架及应用程序执行过程
Android基础知识学习 新手上路,还请多多帮助.由于初学,博客内容难免有不正确的地方,还请各位多多指教,相互学习! 主要内容: 1.Android层次架构及主要功能 2.Android编程模型,程 ...
- (转)对《30个提高Web程序执行效率的好经验》的理解
阅读了博客园发布的IT文章<30个提高Web程序执行效率的好经验>,这30条准则对我们web开发是非常有用的,不过大家可能对其中的一些准则是知其然而不知其所以然. 下面是我对这些准则的理解 ...
- 大话Spark(3)-一图深入理解WordCount程序在Spark中的执行过程
本文以WordCount为例, 画图说明spark程序的执行过程 WordCount就是统计一段数据中每个单词出现的次数, 例如hello spark hello you 这段文本中hello出现2次 ...
- MFC学习之程序执行过程梳理
*首先利用全局变量对象theApp启动应用程序.这是由于这个全局对象,基类CWinApp中this的指针才干指向这个对象.假设没有这个全局对象,程序在编译时不会出错,但在执行时就会出错. *调用全局应 ...
- 现在连Linux都搞不懂,当初我要是这么学习操作系统就好了!
原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 简介 学习编程,操作系统是你必须要掌握的基础知识,那么操作系统到底是什么呢? 这还 ...
- Linux命令行上程序执行的那一刹那!
转自:http://www.cppblog.com/cuijixin/archive/2008/03/14/44463.html by falcon<zhangjinw@gmail.com> ...
随机推荐
- [seaborn] seaborn学习笔记6-热图HEATMAPPLOT
6 热图Heatmapplot(代码下载) 热图是指通过将矩阵单个的值表示为颜色的图形表示.热力图显示数值数据的一般视图非常有用,制作热图很简单,且不需要提取特定数据点.在seaborn中使用heat ...
- [OpenCV实战]43 使用OpenCV进行背景分割
运动背景分割法Background Segment主要是指通过不同方法拟合模型建立背景图像,将当前帧与背景图像进行相减比较获得运动区域.下图所示为检测图像: 通过前面的检测帧建立背景模型,获得背景图像 ...
- .NET 7新特性
2022年11月份微软推出了带有STS(标准期限支持)的.NET版本7,仅提供18个月的支持. 微软今年推出了STS版本,因为它已经在2019年提到,它将在每年11月左右发布一个新版本的.NET. 但 ...
- 刷题笔记——3002.买图书 & 2763.计算(a+b)/c的值
题目1 3002.买图书 代码 while True: try: n,m=map(float,input().strip().split()) if(n==10 and m==1): print('{ ...
- echarts图表配置
1.柱状图 option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] ...
- FAQ os.system调用失效问题
os.system调用失效问题 背景 有个学员反馈allure无法生成报告 # 示例代码 import pytest,os def test_os(): pass if __name__ == '__ ...
- ThinkPad E580 装Ubuntu系 系统无WIFI 解决办法
首先得下载 最新的驱动,我之前因为自己的下载的驱动不够新,导致我的驱动一直装不上去 https://github.com/tomaspinho/rtl8821ce 这个是最新的驱动的下载 地址,建议从 ...
- *未解决 javaweb登录+验证码 bug存留
参考:https://www.cnblogs.com/ajing2018/p/15917166.html 感谢大佬指路 虽然还是没跑起来quq ## 案例:验证码 1. 案例需求: ...
- P22_条件渲染
条件渲染 wx:if 在小程序中,使用 wx:if="{{condition}}" 来判断是否需要渲染该代码块: 也可以用 wx:elif 和 wx:else 来添加 else 判 ...
- java7.14