首页 > 其他分享 >Go Mutex 流程

Go Mutex 流程

时间:2024-06-24 09:43:09浏览次数:12  
标签:waiterCount starving woken -- ED 流程 CAS Mutex Go

mutex 流程

type Mutex struct {
    state int32
    sema  uint32
}

等效于

type Mutex struct {
    locked uint
    woken uint
    starving uint
    waiterCount uint
    sema  uint32
}

Lock 流程

%%{ init: { 'flowchart': { 'curve': 'monotoneX' } } }%% flowchart LR ST("Lock") -->CAS{"CAS(locked=1)"} CAS--Yes-->ED CAS-->SlowPathStart(SlowPathStart)-->CANSPAN{CANSPAN} CANSPAN--Yes-->SPAN[SPAN] CANSPAN--No-->CAS0 SPAN--success-->D0[woken=1] D0-->CAS0{"CAS(m,old, new)"}--Yes-->CAS1(( )) CAS1--starving==0 && locked==1-->ED CAS1-->E0[waiterCount+=1]-->E[SemacquireMutex阻塞]-->F[被唤醒] F--starving==0-->H[starving=1]-->SlowPathStart F--starving==1-->G[waiterCount-=1] G-->ED ED(End)

UnLock流程

%%{ init: { 'flowchart': { 'curve': 'monotoneX' } } }%% flowchart TB ST("UnLock") ST-->A[locked=0] A--locked==0 \n&& woken==0 \n&& starving==0 \n&& waiterCount==0-->ED A-->B(( )) B--mutexStarving=1-->B1[Semrelease]-->ED B--mutexStarving=0-->C(( )) C--waiterCount=0==0 \n|| mutexLocked==1 \n|| woken==1 \n|| starving==1-->ED C-->D["CAS(waiterCount-=1,woken=1)"]-->D1[Semrelease]-->ED ED(End)

标签:waiterCount,starving,woken,--,ED,流程,CAS,Mutex,Go
From: https://www.cnblogs.com/aloe-n/p/18264384

相关文章

  • 大模型备案网信办全网最详细流程说明【附附件】
    本文要点:大模型备案最详细说明,大模型备案条件有哪些,《算法安全自评估报告》模板,大模型算法备案,大模型上线备案,生成式人工智能(大语言模型)安全评估要点,网信办大模型备案。大模型备案安全评估流程详细说明,见下图:大模型安全评估流程图算法备案安全评估流程详细说明,见下图:算......
  • [GodotDL C# D2]从空格控制转弯到撞墙检测
    书接上回:https://www.cnblogs.com/meny233/p/18250399新增功能:空格控制转弯导出变量撞墙检测音乐播放前戏点击查看代码usingGodot;usingSystem;publicpartialclassLine:CharacterBody3D{ [Export] publicfloatSpeed=10f; [Export] publicboolturn......
  • goto语句
    C语言中提供了可以随意滥用的goto语句和标记跳转的符号从理论上goto语句是没有必要的,实践中没有goto语句很容易写出代码。但是某些场合下goto语句还是用的着的,最常见的用法是终止程序在某些深度嵌套的结构的处理过程。例如,一次跳出两层或多层循环。多层循环这种情况用break是......
  • go语言与html和js的连接与使用
    functionlogin(username,password,userType){  varusername=document.getElementById('userName').value;   varpassword=document.getElementById('password').value;   varuserType=document.getElementById('userType'......
  • JavaScript与Go后端服务连接方法
    1.概述本文档描述了如何使用JavaScript(在浏览器或Node.js环境中)与使用Go语言编写的后端服务进行通信。我们将通过HTTP请求来实现前后端的数据交互。2.前提条件后端服务已经部署并运行在指定的URL上。JavaScript环境已经配置好,如果是Node.js,需要安装axios或fetch库。3.Go......
  • 【项目经理】软件项目全流程全过程性资料配套辅导文档
    在软件开发过程中,文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程,还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用,以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档编写要点。 获取:点我获取引言软件开......
  • 这些工具都可以帮助用户更有效地管理和使用剪贴板,提供了比系统自带剪贴板更强大的功能
    在Windows环境中,有一些开源的剪贴板查看和管理工具可以帮助用户更有效地管理剪贴板历史记录。下面是几个比较流行的开源工具:Ditto:简介:Ditto是一个功能强大的剪贴板扩展工具,它保留了剪贴板的历史记录,允许用户随时访问之前复制的内容。主要功能:保存和管理剪贴板历史快速......
  • [Golang并发]GMP模型
    什么是GoroutineGoroutine=Golang+Coroutine。Goroutine是golang实现的协程,是用户级线程。Goroutine的特点:相比线程,其启动的代价很小,以很小栈空间启动(2Kb左右)能够动态地伸缩栈的大小,最大可以支持到Gb级别工作在用户态,切换成很小与线程关系是n:m,即可以在n个系统线程上多......
  • 【异常错误】so.11: undefined symbol: cublasLtHSHMatmulAlgoInit, version libcubla
    今天安装了一个新的conda环境,但是一开始运行就出现错误: Traceback(mostrecentcalllast): File"/home/mapengsen/anaconda3/envs/37/lib/python3.7/site-packages/torch/__init__.py",line172,in_load_global_deps  ctypes.CDLL(lib_path,mode=ctypes.RTLD......
  • python流程控制
               ......