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

做网站的做app的最新疫情19个城市封城

做网站的做app的,最新疫情19个城市封城,中国建设网站用户名,wordpress+怎么改密码Go 源码之读写锁 sync.RWMutex 文章目录 Go 源码之读写锁 sync.RWMutex一、简介二、源码(一)RWMutex数据结构(二)Lock(三)Unlock(四)TryRLock(五)Rlock(六)RUnlock三、常见问题1. 什么是CAS,什么是原子操作2. 写操作是如何阻止写操作的3. 写操作是如何阻止读操作的…

Go 源码之读写锁 sync.RWMutex

文章目录

  • Go 源码之读写锁 sync.RWMutex
  • 一、简介
  • 二、源码
    • (一)RWMutex数据结构
    • (二)Lock
    • (三)Unlock
    • (四)TryRLock
    • (五)Rlock
    • (六)RUnlock
  • 三、常见问题
    • 1. 什么是CAS,什么是原子操作
    • 2. 写操作是如何阻止写操作的
    • 3. 写操作是如何阻止读操作的
    • 4. 读操作是如何阻止写操作的
    • 5. 为什么写锁定不会被饿死
  • 总结
  • 参考资料

一、简介

sync.RWMutex 是 Go 语言标准库中的读写锁。
读写锁允许同时存在读锁和写锁。读锁可以被多个线程同时持有,而写锁在任何时候只能被一个线程持有。

sync.RWMutex 的主要作用:是在多线程环境下提供对共享资源的读/写访问控制,以提高并发性能。
它的一些主要方法包括:

  • Lock:获取写锁。
  • RLock:获取读锁。
  • Unlock:释放锁。

使用读写锁的好处是,在多读少写的场景下,可以提高并发性能,因为读操作不会相互阻塞。

在使用 sync.RWMutex 时,需要注意以下几点:

  • 确保在适当的时候释放锁,以避免死锁。
  • 避免在持有锁的情况下进行耗时操作。
  • 尽量减少锁的持有时间

二、源码

(一)RWMutex数据结构

type RWMutex struct {w           Mutex  // 写锁writerSem   uint32 // 缓冲信号量,获取写锁的阻塞等待信号队列readerSem   uint32 // 缓冲信号量,获取读锁的阻塞等待信号队列readerCount int32  // 当前持有读锁的 goroutine 数量,负数表示有个写锁在执行readerWait  int32  // 获取写锁时,如果之前还有 readerWait 数量的读锁在执行,则需要等待执行完才能获取写锁
}

字段说明:

  • w

    写锁

  • writerSem

    缓冲信号量,当有goroutine获取写锁时,如果当前有读锁在占有,则调用 runtime_SemacquireMutex(&rw.writerSem, false, 0)

    将当前goroutine进行睡眠,并排队到 writerSem 队列的队尾,等待所有的读锁释放之后再调用runtime_Semrelease(&rw.writerSem, false, 1)进行唤醒

  • readerSem

    缓冲信号量,当有goroutine获取读锁时,如果当前有写锁在占有(readerCount),则调用 runtime_SemacquireMutex(&rw.readerSem, false, 0),将当前goroutine进行睡眠,并排队到 readerSem 队列的队尾,等待写锁释放之后再调用runtime_Semrelease(&rw.readerSem, false, 0)进行唤醒

  • readerCount

    当前持有读锁的goroutine数量,负数表示有个写锁在执行,在获取写锁时,会将readerCount-rwmutexMaxReaders变为负数

    写锁释放后readerCount会再+rwmutexMaxReaders变为正数

  • readerWait

    首先读锁是会阻塞写锁的获取的,当一个goroutine尝试去获取一个写锁时,会将当前持有读锁的数量readerCount赋值给readerWait,表示当前goroutine要等待readerWait个goroutine释放读锁之后才能成功获取写锁

(二)Lock

// 获取写锁,会等待所有的读锁释放
func (rw *RWMutex) Lock() {if race.Enabled {_ = rw.w.staterace.Disable()}
http://www.zhongyajixie.com/news/35087.html

相关文章:

  • 集团企业网站建设方案策划书营销型外贸网站建设
  • 网站成功案例设计营销软文500字范文
  • 学做网站要学什么软件何鹏seo
  • 宝应网站设计留号码的广告网站不需要验证码
  • 海口专门做网站自己代理一款手游需要多少钱
  • 哈尔滨工程建设信息网官网开封网站优化公司
  • 网站建设包括什么科目全网关键词搜索工具
  • 做扎染的网站百度推广效果怎样
  • 网站运营与管理的对策建议免费关键词挖掘网站
  • 新手用什么框架做网站比较好seo服务深圳
  • 网站建设的需求分析深圳网站关键词优化推广
  • 最好的开发网站建设市场营销方案
  • 网站快照前显示中文怎么做的广州优化防控措施
  • 广告型网站建设b站视频未能成功转码
  • 仿xss网站搭建网站设计与实现毕业设计
  • 3g网站开发教程网络营销好不好
  • 框架网页模板下载seo优化排名服务
  • 家居企业网站建设平台北京seo专业团队
  • 高端网站设计百家号公关
  • 桂林手机网站建设东莞seo网络培训
  • 怎么建网站平台手机怎么建立网站
  • wordpress媒体库源码seo优化培训
  • wordpress 能承受多大并发访问量温州最好的seo
  • 新公司名字大全参考seo优化网
  • 信息设计网站优化网站的公司哪家好
  • 莘县网站建设网络推广有几种方法
  • php直播网站开发友情链接是外链吗
  • wordpress企业新闻app优化
  • wordpress多站点文章调用黑帽seo联系方式
  • 顺德做网站的公司网络营销推广公司简介