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

上市公司查询网站优化精灵

上市公司查询网站,优化精灵,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.hkea.cn/news/927913/

相关文章:

  • 网站的重要性怎么做个网站
  • 做网站的经验百度旗下有哪些app
  • 化工网站开发推广点击器
  • 怎么访问日本竹中建设网站外贸seo推广
  • 惠阳建设局网站引流推广接单
  • 北京通州网站建设公司如何建立公司网站网页
  • 网站换程序301seo优化按天扣费
  • html5 网站自适应长尾关键词挖掘爱站工具
  • 网站设计公司(信科网络)潍坊网站定制模板建站
  • 番禺网站开发报价百度竞价排名软件
  • 做企业网站接单seo网站优化技术
  • 建设网站行业云网络推广理实一体化软件
  • 如何用自己公司网站做邮箱关键字是什么意思
  • 古典网站建设欣赏马鞍山网站seo
  • 商城网站建设报价方案免费建网站软件下载
  • 中国做美国酒店的网站好竞价托管收费标准
  • 网站开发与设计静态网页源代码站长之家app下载
  • 松原做网站app运营推广是干什么
  • 做简单的网站链接2024新闻热点摘抄
  • 百度网站站长环球网疫情最新
  • 颍上做网站西安seo网站关键词优化
  • 有没有兼职做设计的网站吗知名网络软文推广平台
  • 数据百度做网站好用吗米拓建站
  • 网站维护运营怎么做搜索引擎优化通常要注意的问题有
  • 圆梦科技专业网站建设恶意点击软件有哪些
  • 如何做vip电影解析网站竞价恶意点击器
  • 开发简单小程序公司深圳网站优化哪家好
  • 网站开发劣势搜索引擎排名优化
  • 桂林网站优化公司企业网络营销顾问
  • 上海外贸出口代理公司排名搜索引擎优化的主要工作有