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

高端品牌网站建设图片郑州seo排名第一

高端品牌网站建设图片,郑州seo排名第一,b2b网站模板,嘉兴网站建设正规公司互斥锁sync.Mutex是在并发程序中对共享资源进行访问控制的主要手段,对此Go语言提供了非常简单易用的机制。sync.Mutex为结构体类型,对外暴露Lock()、Unlock()、TryLock()三种方法,分别用于阻塞加锁、解锁、非阻塞加锁操作(加锁失败…

互斥锁sync.Mutex是在并发程序中对共享资源进行访问控制的主要手段,对此Go语言提供了非常简单易用的机制。sync.Mutex为结构体类型,对外暴露Lock()、Unlock()、TryLock()三种方法,分别用于阻塞加锁、解锁、非阻塞加锁操作(加锁失败后快速返回结果不会陷入阻塞状态)。

sync.Mutex内部实现比较复杂,但是坚持阅读之后,却有很大的收益。比如如何设计一个任务调度系统,每个时间点只有一个任务执行,在调度任务时,既需要保证任务执行的效率也需要保证一个任务不会出现饿死的情况,sync.Mutex的内部机制可能会给你一些借鉴经验。除此之外,还能够让你对TryLock有更加深刻的理解和在使用Mutex时的注意点。

版本:go1.24.1

数据结构

//package: pakcage:src\internal\sync\mutex.gotype Mutex struct {state int32sema  uint32
}const (mutexLocked = 1 << iota // mutex is lockedmutexWokenmutexStarvingmutexWaiterShift = iotastarvationThresholdNs = 1e6
)

Mutex结构比较简单,定义了两个字段:

  • state:根据bit位的划分,表示多种含义。
  • sema:信号量,用于管理协程阻塞和唤醒的关键机制,确保协程高效调度和唤醒。

state字段通过分割比特位来表示三种状态和记录当前等待获取锁的协程数量,从低位到高位依次为:

  • mutexLocked:1bit位,当前mutex是否被锁定,0表示未锁定,1表示锁定。
  • mutexWoken:1bit位,当前是否有协程从阻塞中被唤醒,0表示未被唤醒,1表示有协程被唤醒。
  • mutexStarving:1bit位,当前mutex的所处模式,0表示正常模式,1表示饥饿模式。
  •  mutexWaiterShift:位偏移量,利用偏移后的位来记录等待协程的数量,占用29bit位。

两种模式

正常模式和饥饿模式是sync.mutex包的精髓,通过这两种模式来保证性能和公平。

  • 正常模式:追求性能,允许新的协程通过自旋和竞争来快速获取锁,减少协程的上下文切换开销。
  • 饥饿模式:兜底公平性,确保等待者不被饿死。

在正常模式下,等待者按FIFO顺序排队,但被唤醒的等待者不拥有mutex,并与新到达的goroutines竞争所有权。而新加入的goroutines有一个优势——它们已经在CPU上运行,并且可能有很多,所以唤醒的等待者很有可能会失败。在这种情况下,它被排在等待队列的前面。如果等待者获得mutex的时间超过1ms,将mutex将切换到饥饿模式。

在饥饿模式下,mutex的所有权直接从正在解锁的goroutine移交(hand off)给队列前面的等待者。新到达的goroutines不会尝试获取mutex,即使mutex已经解锁,(新到达的goroutines)也不会尝试自旋。相反,它们把自己排在等待队列的尾部。如果一个等待者获得了mutex的所有权,并且发现以下任一条件:(1)它是队列中最后一个等待者;(2)它等待的时间少于1毫秒;那么mutex将切换回正常工作模式。

源码解读

请访问github仓库,以注释的方式进行解读,提高阅读体验和保证思考的连续性。

仓库地址:wuqiong818/go-source-interpretation: go语言解读

参考文章

Go1.24.1源码

Go专家编程 sync.Mutex章节

【Go万字洗髓经】Golang中sync.Mutex的单机锁:实现原理与底层源码-CSDN博客

http://www.dtcms.com/wzjs/519071.html

相关文章:

  • 做网站需要记哪些代码网络舆情分析报告
  • b2b2c电商网站开发推广网站模板
  • 怎样装修公司网站百度100%秒收录
  • 花钱做的网站推广被骗佛山疫情最新消息
  • 电脑安装wordpressseo关键字优化
  • 货运配载做网站安徽新站优化
  • 住房城乡建设部网站诚信培训课程表
  • 网页升级未成年人自行离开南京seo排名公司
  • 一个主机怎么做两个网站百度指数使用方法
  • 建设手机网站的方案移投界seo
  • 企业运营效率的三个指标贵州seo培训
  • 找到做网站的公司网站seo分析常用的工具是
  • 做快餐料包的网站有哪些人际网络营销2900
  • 学校网站建设培训方案模板国内新闻最新消息今天简短
  • 中国建设银行网站查征信企业网站建设哪家好
  • 宜昌商城网站建设北京网络推广
  • 创建网站免费注册搜狗站长平台验证不了
  • 殡葬网站建设知乎推广公司
  • 05网站西安网站推广排名
  • 怎样做一个企业的网站建站网络营销包括的主要内容有
  • dz论坛如何做网站地图北京百度竞价托管公司
  • 公司网站建设属于什么职位有趣的网络营销案例
  • 做淘宝客网站多少钱网络营销推广seo
  • 旅游网站建设的总结seo排名赚
  • 口碑好网站建设价格在线优化网站
  • lamp网站开发网站关键词优化代理
  • 自己做网络棋牌网站流程seo推广外包企业
  • 静态网站怎么在网上推销产品
  • 廊坊网站制作公司排名今日新闻热点
  • 合肥网站推广哪家好产品软文案例