学习操作系统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> ...
随机推荐
- python实验报告(第12章)
实验12:GUI界面编程 一.实验目的和要求 1.学会应用常用控件: 2.学会使用BoxSizer布局: 3.学会事件处理. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 ...
- CH32V307 内部10M网络工程创建流程
说明: 本次操作是基于目前MRSV1.8.0版本,以及WCH官网CH32V307-V1.8版本的例程操作. MRS链接:http://www.mounriver.com/download CH32V3 ...
- [Unity]Update()与FixedUpdate()
Update()介绍 首先我们从官方文档的介绍了解: MonoBehaviour.Update() Description Update is called every frame, if the M ...
- 动力节点——day08
什么是集合,有什么用? 数组其实就是一个集合,集合实际上就是一个容器,可以用来容纳其他数据类型 集合为什么说在开发中使用最多? 集合是一个容器,是一个载体,可以一次容纳多个对象,在实际开发中,假设连接 ...
- SpringMVC学习笔记 - 第二章 - SSM整合案例 - 技术整合、统一结果封装、统一异常处理、前后联调、拦截器
[前置内容]Spring 学习笔记全系列传送门: Spring学习笔记 - 第一章 - IoC(控制反转).IoC容器.Bean的实例化与生命周期.DI(依赖注入) Spring学习笔记 - 第二章 ...
- 笔记本USB接口案例_分析-笔记本USB接口案例_实现
笔记本USB接口案例_分析 笔记本电脑(laptop)通常具备使用USB设备的功能.在生产时,笔记本都预留了可以插入USB设备的USB接口, 但具体是什么USB设备,笔记本厂商并不关心,只要符合USB ...
- 构造方法-JavaBean
构造方法 当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值. 小贴士:无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了 ...
- 联邦GNN综述与经典算法介绍
作者:京东科技 李杰 联邦学习和GNN都是当前AI领域的研究热点.联邦学习的多个参与方可以在不泄露原始数据的情况下,安全合规地联合训练业务模型,目前已在诸多领域取得了较好的结果.GNN在应对非欧数据结 ...
- 2.17 win32 按钮事件的处理
按钮的本质就是窗口 点击查看代码 void CreateButton(HWND hwnd) { HWND hwndPushButton; HWND hwndCheckBox; HWND hwndRad ...
- 教你用手机的NFC功能模拟门禁卡,实现出门不带卡
此教程教您将门禁卡.考勤卡.会员卡.停车卡.电梯卡等等各种卡片模拟进NFC手机里,从而用手机代替门禁卡 一.软硬件准备 NFC Tool 手机上的IC卡读写编辑软件,搭配蓝牙读卡器或者OTG读卡器,可 ...