当前位置: 首页 > news >正文

考古并发历史(1)

并发问题之前先有最早问题只是描述一种争夺资源过程Dekker提出临界概念本质依赖一个循环概念进行描述

Dekker 算法(1959)

// P0 的伪代码
int turn   //记录轮数避免死锁
flag[0] = true;  //标志位
while (flag[1]) {           // 如果 P1 也想进入if (turn != 0) {        // 轮到 P1?
        flag[0] = false;    // 让 P1 优先while (turn != 0) ; // 等待轮到自己
        flag[0] = true;     // 再次尝试进入}
}
// 临界区
critical_section();
// 离开临界区
turn = 1;
flag[0] = false;

Solution of a Problem in Concurrent Programming Control Dijkstra 1965

integer j;  // 定义整型变量 j,用于循环计数LiO: 
    b[i] := false;  // 标签 LiO:进程 i 开始循环,标记自己暂时不进入临界区Lil: if k # i then  // 如果轮到的进程 k 不是自己,则进入以下逻辑
Li2: 
        begin
            c[i] := true;  // 标记进程 i 已准备好进入临界区
Li3: if b[k] then k := i;  // 如果进程 k 想进入临界区,则将轮次指向自己
            go to Lil;             // 回到 Lil 标签,重新检查顺序
        endelse
Li4: 
        begin
            c[i] := false;  // 否则(轮到自己),暂时取消准备状态for j := 1 step 1 until N do  // 检查所有进程 j(1..N)if j # i and not c[j] then go to Lil; // 如果 j 不是自己且未准备好,回到 Lil 重新检查
        end;    critical section; // 临界区:执行需要互斥访问的操作    c[i] := true; // 临界区结束后,标记自己完成访问
    b[i] := true; // 标记自己允许其他进程检查/轮到自己    remainder of the cycle in which stopping is allowed;  // 临界区之外的操作,可以被中断或调度    go to LiO;  // 回到 LiO 标签,进入下一轮循环

首先我们注意这个版本Dijkstra提出算法他自己也强调了两个前提即对称和循环。然这篇论文除了并发问题扩展n进程引申一个概念---顺序为什么需要顺序引入顺序,使每个进程在尝试进入临界区时按照固定顺序检查前面的进程保证一次只有一个进程可以进入临界区顺序即是一个唯一标识起到区分作用同时也是一种等待凭证....

然后还有就是当时这个算法的提出是没有考虑死锁检查的或者说这个假设的场景太过于理想。依赖一个轮次检查保证不发同时进入等待状态。而这个维护轮次的变量是安全的吗?在后现代一些理论意识到多核cpu这个过程也是不可靠......

事实关于顺序一些离散描述DijkstraCooperating sequential processes 提出更加完整模型解释

参考这段描述 描述这种设备一种顺序设备原因在于这里同时输入电流构造出来结果总会得到最终一致性

然后大概一直迭代

他假设机械几种迭代方式说明一种抽象概念---顺序顺序机械区别互相转换

题主这边总结两个提供对应连接明确这个时候计算机并发理论还没有引入偏序这样概念所以还请各位仔细审视学习如果为了做题可以一个结论应付奥妙之处往往在于学习发现

在非顺序机器中,比较事件之间不可比;

在顺序机器中,比较事件之间全序(total order);

顺序我们判断标准不是具体运算而是依赖如同机械结构传导这样东西也就是所谓不可比深刻来说这种类似于最终一致性我们怎么判断怎么样是最终?而什么样是达到稳定

比较就是强调一种运算可比性所以对于状态取决于这种运算可比性锚定

E.W.Dijkstra Archive: Cooperating sequential processes (EWD 123) (utexas.edu)

http://www.dtcms.com/a/532645.html

相关文章:

  • 班级网站设计外国大气网站
  • 深拷贝浅拷贝
  • 样本与样本值
  • 无极网站网站首屏高度
  • ansible自动化运维入门篇-ansible部署
  • 如何在搜索中找到自己做的网站o2o电商交易类平台有哪些
  • Rust中错误处理机制
  • Ubuntu 24.04上安装MySQL 8.0
  • Java基于SpringBoot的高校报修与互助平台小程序【附源码、文档说明】
  • 工信部icp备案流程关键词在线优化
  • 做视频的模板下载网站ppt汇报模板免费下载
  • 10.16-10.25力扣计数刷题
  • 在K8s中部署多个ASP.NET Core实例
  • 14.如何利用ArcGIS将矢量线、面的坐标数据保存为txt
  • 网站开发者模式怎么打开做策划网站推广怎么写简历
  • zynq ttc pwm例子
  • 【底层机制】linux IO 为什么要有进程表项、文件表项、v节点表项、i节点表项
  • 怎么用wordpress修改网站源码镇江网站网站建设
  • 设计方案表网站名称汉台网站制作
  • git误合并两分支如何回退
  • 【Linux系统编程】编译器gcc/g++
  • LeetCode 面试经典 150_链表_K 个一组翻转链表(61_25_C++_困难)(四指针法;头插法)
  • 做一个简单网站多少钱建设银行网站买手机
  • Ubuntu 22.04上安装Vivado2023.1(离线方式)
  • 使用 OpenAI SDK 调用阿里云 Qwen 模型:从基础到提示词工程实战
  • HTTPS 高频考点
  • 安徽网站建设 网新线上推广100种方式
  • 东莞专业做网站优化用vs2010做网站登入
  • 若依框架学习第二天:功能改造与问题攻坚实战 (2)
  • 为什么要学深度学习?——从“传统编程”到“数据驱动”的思维跃迁(附AI落地案例)