【并发理论】事件、执行轨迹、可行性公理、最大因果模型

本文主要是介绍【并发理论】事件、执行轨迹、可行性公理、最大因果模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 事件
      • 执行轨迹
      • 可行性公理 (Feasibility Axioms)
      • 最大因果模型(Maximal Causal Model)

原内容来自 基于约束求解的并发程序错误预测方法研究
— 背景 —
任意线程都能通过执行一组原子操作来访问并发对象;若对某些并发对象进行访问的原子操作序列能由并发程序的执行产生,则表明这些原子操作序列满足了规定的顺序要求。这些顺序要求被称为并发对象的 序列化规范(serial specification)

序列化规范是顺序要求,是并发程序对并发对象访问产生的原子操作序列顺序。

并发对象多为两种:

  1. 共享内存地址:对共享内存地址有read和write操作,序列化规范定义了每一个read值=最近前一个write的值
  2. 不可重入锁:对每一个不可重入锁有acquire获得锁、release释放锁操作,序列化规范定义了acquire和release 数量差为0或1,且所有连续的获得锁、释放锁操作是对同一个线程进行的操作。

事件

事件(Event)是线程在并发对象上执行的原子操作,表示为“属性-值”元组
属性有:访问当前并发对象的线程thread、 对该并发对象进行的操作类型op、该事件访问的并发对象target、对并发对象进行的操作值data(thread=t1,op=read,target=o,data=1)意为线程1对共享变量o进行读操作,读值为1,简写为read(t1,o,1)
对于两个事件e1,e2,当且仅当所有属性都相等,才称为这俩个事件相等。

在这里插入图片描述

执行轨迹

执行轨迹抽象为一组事件序列 τ = < e 1 , e 2 , . . . e n > \tau=<e_1,e_2,...e_n> τ=<e1,e2,...en>

τ ∣ o : 执 行 轨 迹 τ 对 并 发 对 象 o 的 事 件 序 列 τ|o :执行轨迹τ对并发对象o的事件序列 τoτo
τ ∣ t : 执 行 轨 迹 τ 中 属 于 线 程 t 的 事 件 序 列 τ|t :执行轨迹τ中属于线程t的事件序列 τtτ线t
τ ∣ t , o : 执 行 轨 迹 τ 中 线 程 t 访 问 并 发 对 象 o 的 事 件 序 列 τ|t,o:执行轨迹τ中线程t访问并发对象o的事件序列 τt,oτ线t访o
τ e : 执 行 轨 迹 τ 中 包 含 事 件 e 在 内 的 前 缀 事 件 序 列 , 例 τ = τ 1 e τ 2 , 则 τ e = τ 1 e τ_e:执行轨迹τ中包含事件e在内的前缀事件序列,例τ=τ_1eτ_2,则τ_e=τ_1e τeτeτ=τ1eτ2τe=τ1e
l a s t o p ( τ ) : 执 行 轨 迹 τ 最 后 一 个 o p 操 作 的 事 件 last_{op}(\tau): 执行轨迹\tau 最后一个op操作的事件 lastop(τ):τop

顺序一致性执行轨迹:当且仅当对每个并发对象o,事件序列τ|o 都满足序列化规范时,执行轨迹τ被称为顺序一致性执行轨迹包含以下要求:

  • 读写一致性: read读的值是执行轨迹在read之前且距离该read事件最近且和read访问同一个共享内存地址的write值。设e为该read事件 读写一致性可形式化表示为 d a t a ( e ) = d a t a ( l a s t w r i t e ( τ e ∣ t a r g e t ( e ) ) ) data(e)=data(last_{write}(\tau_e|target(e))) data(e)=data(lastwrite(τetarget(e)))
  • 锁互斥:每个release事件之前都有同一个线程且同一个锁变量的acquire事件与之匹配,且对每一个acquire-release锁对 都不可与其他访问同一锁变量的锁对产生交织。 τ ∣ l = e 1 , e 2 , . . . e n , 若 有 l ≤ k < n , o p ( e k ) = a c q u i r e 则 o p ( e k + 1 ) = r e l e a s e , t h r e a d ( e k ) = t h r e a d ( e k + 1 ) \tau|l=e_1,e_2,...e_n ,若有l≤k<n , op(e_k)=acquire则op(e_{k+1})=release,thread(e_k)=thread(e_{k+1}) τl=e1,e2,...en,lkn,op(ek)=acquireop(ek+1)=releasethread(ek)=thread(ek+1)
  • Happens-before关系:begin事件是线程执行的第一个事件,且发生在父线程fork(t,t’)之后,e=begin(t’)为τ中事件。 τ ∣ t ′ τ|t' τt是e开头的事件序列, τ e \tau_e τe中有且仅有fork(t,t’)必在e之前发生。
    end事件是线程执行的最后一个事件且另一线程等待当前线程终止的join事件只能发生在end之后。e=end(t’) τ ∣ t ′ \tau|t' τt是以e结尾的事件序列,τ中有且仅有join(t,t’)在e之后发生

可行性公理 (Feasibility Axioms)

易知并发程序每次运行的执行轨迹均满足顺序一致性要求,但是这些顺序一致性执行轨迹之间不一定存在相关性。根据可行性公理,可由收集的顺序一致性执行轨迹推导出其他与该执行轨迹相关的顺序一致性执行轨迹,且不需要其他信息。任一并发程序P,通过P实际产生的τ构成的集合表示为 feasible(P)

可行性公理的演变过程
① feasible( P) 在交织条件下是封闭的,任意τ所满足顺序一致性的交织都属于feasible( P)(过于严格、应用弱) 满足顺序一致性情况下重新排列组合顺序 如上图,满足顺序一致性的 τ ( 127891 0 ′ ) , e ( 1 0 ′ ) = r e a d ( t 2 , c , 0 ) τ(1278910') ,e(10')=read(t2,c,0) τ(1278910),e(10)=read(t2,c,0) 就无法用公理推出
② 在①基础上,提出前缀封闭和局部确定性可行性公理,前缀 τ e τ_e τe也属于feasible§,局部情况由具体线程执行到的事件的之前事件而确定。局部确定性表示为: τ 1 e 1 , τ 2 ∈ f e a s i b l e ( P ) , τ 1 ∣ t h r e a d ( e 1 ) = τ 2 ∣ t h r e a d ( e 1 ) τ_1e_1,\tau_2 ∈feasible(P), \tau_1|thread(e_1)=\tau_2|thread(e_1) τ1e1,τ2feasible(P)τ1thread(e1)=τ2thread(e1)

  • τ 2 e 1 满 足 顺 序 一 致 性 , τ 2 e 1 ∈ f e a s i b l e ( P ) \tau_2e_1满足顺序一致性,τ_2e_1∈feasible(P) τ2e1τ2e1feasible(P)
  • 若 o p ( e 1 ) = r e a d , 且 存 在 其 他 事 件 e 2 满 足 e 2 [ d a t a ( e 1 ) / d a t a ] = e 1 , 并 且 τ 2 e 2 满 足 顺 序 一 致 性 , 则 τ 2 e 2 ∈ f e a s i b l e ( P ) 若 op(e_1)= read,且存在其他事件e_2满足e_2[data(e_1)/data]=e_1,并且 τ_2e_2满足顺序一致性,则 τ2e2∈feasible(P) op(e1)=reade2e2[data(e1)/data]=e1τ2e2τ2e2feasible(P)
    e[v/data]表示用值 v 代替值data,则该等式表示e2除了其操作的变量值和e1不同外,其他属性均相同)
    考虑了交织和read操作的松弛要求 (还是不够松弛)除了read操作还有锁操作,write没有考虑。

③ 考虑分支事件的可行性公理。同意前缀封闭,认为write操作依赖同一线程在该事件之前所有read事件

  • 若 τ 1 e 1 , τ 2 ∈ f e a s i b l e ( P ) , t h r e a d ( e 1 ) = t , 且 τ 1 ∣ t ≈ τ 2 ∣ t ( 除 了 r e a d w r i t e 值 , 其 他 都 相 等 ) , 则 τ 2 e 1 ∈ f e a s i b l e ( P ) 若τ_1e_1,\tau_2 ∈feasible(P), thread(e_1)=t, 且\tau_1|t≈\tau_2|t (除了read write值,其他都相等),则 τ_2e_1∈feasible(P) τ1e1,τ2feasible(P)thread(e1)=t,τ1tτ2t(readwrite)τ2e1feasible(P) 前缀封闭
  • 若 o p ( e 1 ) = b r a n c h , ( b r a n c h 这 里 指 跳 转 分 支 事 件 , 分 支 事 件 依 赖 t 在 此 分 支 之 前 所 有 r e a d 事 件 ) 且 τ 1 ∣ t , r e a d = τ 2 ∣ t , r e a d , 则 τ 2 e 1 ∈ f e a s i b l e ( P ) 若 op(e_1)= branch,(branch这里指跳转分支事件,分支事件依赖t在此分支之前所有read事件)且\tau_1|t,read=\tau_2|t,read,则 τ_2e_1∈feasible(P) op(e1)=branch(branchtread)τ1t,read=τ2t,readτ2e1feasible(P)分支事件
  • 若 o p ( e 1 ) = r e a d , 且 存 在 其 他 r e a d 事 件 e 2 满 足 e 2 [ d a t a ( e 1 ) / d a t a ] = e 1 , 并 且 τ 2 e 2 满 足 顺 序 一 致 性 , 则 τ 2 e 2 ∈ f e a s i b l e ( P ) 若 op(e_1)= read,且存在其他read事件e_2满足e_2[data(e_1)/data]=e_1,并且 τ_2e_2满足顺序一致性,则 τ_2e_2∈feasible(P) op(e1)=readreade2e2[data(e1)/data]=e1τ2e2τ2e2feasible(P)仅读值不同
  • 若 o p ( e 1 ) = w r i t e , 且 存 在 值 v 使 e 1 [ v / d a t a ] = e 2 , 并 且 τ 2 e 2 满 足 顺 序 一 致 性 , 则 τ 2 e 2 ∈ f e a s i b l e ( P ) , 若 τ 1 ∣ t , r e a d = τ 2 ∣ t , r e a d , 则 v = d a t a ( e 1 ) 若 op(e_1)= write,且存在值v使e_1[v/data]=e_2,并且 τ_2e_2满足顺序一致性,则 τ_2e_2∈feasible(P),若\tau_1|t,read=\tau_2|t,read,则v=data(e_1) op(e1)=writev使e1[v/data]=e2τ2e2τ2e2feasible(P)τ1t,read=τ2t,read,v=data(e1)仅写值不同
  • 若 o p ( e 1 ) ∉ { b r a n c h , r e a d , w r i t e } , τ 2 e 1 满 足 顺 序 一 致 性 , 则 τ 2 e 1 ∈ f e a s i b l e ( P ) , 若 op(e_1)∉ \{ branch,read,write\}, τ_2e_1满足顺序一致性,则 τ_2e_1∈feasible(P), op(e1)/{branch,read,write}τ2e1τ2e1feasible(P)其它情况也可

此时公理较完备,可产生原子集序列化违背的执行轨迹,原子集序列化违背共有如下9种模式。能产生违背的执行轨迹则可帮助在实际程序中探测。
在这里插入图片描述

最大因果模型(Maximal Causal Model)

feasible(τ)是由能够产生执行轨迹τ的所有 程序执行产生顺序一致性轨迹构成的集合。 可行性公理为顺序一致性τ与最大因果模型feasible(τ)之间的关联提供基础。

定义 对于给定的顺序一致性执行轨迹 τ,其可行性闭包是包含其在内的执行轨迹的最小集合,记作 feasible(τ)。feasible(τ)满足前缀封闭性和局部符号确定性:

  • 前缀封闭 若 τ 1 τ 2 ∈ f e a s i b l e ( τ ) , 则 τ 1 ∈ f e a s i b l e ( τ ) 若τ_1\tau_2 ∈feasible(\tau),则 τ_1∈feasible(\tau) τ1τ2feasible(τ)τ1feasible(τ)
  • 局部符号确定性 假 设 若 τ 1 e 1 , τ 2 ∈ f e a s i b l e ( τ ) , t h r e a d ( e 1 ) = t , 且 τ 1 ∣ t ≈ τ 2 ∣ t 假设 若τ_1e_1,\tau_2 ∈feasible(\tau), thread(e_1)=t, 且\tau_1|t≈\tau_2|t τ1e1,τ2feasible(τ)thread(e1)=t,τ1tτ2t
    ( 1 ) 若 o p ( e 1 ) = b r a n c h , 且 τ 1 ∣ t , r e a d = τ 2 ∣ t , r e a d , 则 τ 2 e 1 ∈ f e a s i b l e ( τ ) (1) 若 op(e_1)= branch,且\tau_1|t,read=\tau_2|t,read,则 τ_2e_1∈feasible(\tau) (1)op(e1)=branchτ1t,read=τ2t,readτ2e1feasible(τ)
    ( 2 ) 若 o p ( e 1 ) = r e a d , 且 存 在 其 他 r e a d 事 件 e 2 满 足 e 2 [ d a t a ( e 1 ) / d a t a ] = e 1 , 并 且 τ 2 e 2 满 足 顺 序 一 致 性 , 则 τ 2 e 2 ∈ f e a s i b l e ( P ) (2) 若 op(e_1)= read,且存在其他read事件e_2满足e_2[data(e_1)/data]=e_1,并且 τ_2e_2满足顺序一致性,则 τ_2e_2∈feasible(P) (2)op(e1)=readreade2e2[data(e1)/data]=e1τ2e2τ2e2feasible(P)
    ( 3 ) 若 o p ( e 1 ) = w r i t e , (3)若 op(e_1)= write, (3)op(e1)=write
    1. 若 τ 1 ∣ t , r e a d ≠ τ 2 ∣ t , r e a d , 则 有 值 s y m τ 2 使 得 τ 2 e 1 [ s y m τ 2 / d a t a ] ∈ f e a s i b l e ( τ ) 1. 若\tau_1|t,read≠\tau_2|t,read ,则有值sym_{\tau_2}使得\tau_2e_1[sym_{\tau_2}/data]∈feasible(\tau) 1.τ1t,read=τ2t,read,symτ2使τ2e1[symτ2/data]feasible(τ)
    2. 若 τ 1 ∣ t , r e a d = τ 2 ∣ t , r e a d , 则 τ 2 e 1 ∈ f e a s i b l e ( τ ) 2.若\tau_1|t,read=\tau_2|t,read,则\tau_2e_1∈feasible(\tau) 2.τ1t,read=τ2t,read,τ2e1feasible(τ)
    ( 4 ) 若 o p ( e 1 ) ∉ { b r a n c h , r e a d , w r i t e } , τ 2 e 1 满 足 顺 序 一 致 性 , 则 τ 2 e 1 ∈ f e a s i b l e ( τ ) (4)若 op(e_1)∉\{ branch,read,write \}, τ_2e_1满足顺序一致性,则 τ2e1∈feasible(\tau) (4)op(e1)/{branch,read,write}τ2e1τ2e1feasible(τ)

总结:最大因果模型的思想有点像遗传算法的交叉和变异,除了固定的基因(顺序一致化),其他基因位置可变(交织)。也可小幅度变异(值不同)。执行轨迹会产生理论上没有语法错误但是与编程目的违背的错误(原子集序列化违背)与真实程序执行会产生的错误相同,从而减少真实实验次数集。

这篇关于【并发理论】事件、执行轨迹、可行性公理、最大因果模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/702705

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识