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

临清做网站在线咨询 1 网站宣传

临清做网站,在线咨询 1 网站宣传,新余商城网站建设,官方网站建设平台✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

✍个人博客:Pandaconda-CSDN博客
📣专栏地址:http://t.csdnimg.cn/UWz06
📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

91. Go 写锁怎么实现

加写锁

const rwmutexMaxReaders = 1 << 30
func (rw *RWMutex) Lock() {// First, resolve competition with other writers.rw.w.Lock()// Announce to readers there is a pending writer.r := atomic.AddInt32(&rw.readerCount, -rwmutexMaxReaders) + rwmutexMaxReaders// Wait for active readers.if r != 0 && atomic.AddInt32(&rw.readerWait, r) != 0 {runtime_Semacquire(&rw.writerSem)}
}

首先调用互斥锁的 lock,获取到互斥锁之后,如果计算之后当前仍然有其他 goroutine 持有读锁,那么就调用 runtime_SemacquireMutex 休眠当前的 goroutine 等待所有的读操作完成

这里readerCount 原子性加上一个很大的负数,是防止后面的协程能拿到读锁,阻塞读

释放写锁

func (rw *RWMutex) Unlock() {// Announce to readers there is no active writer.r := atomic.AddInt32(&rw.readerCount, rwmutexMaxReaders)// Unblock blocked readers, if any.for i := 0; i < int(r); i++ {runtime_Semrelease(&rw.readerSem, false)}// Allow other writers to proceed.rw.w.Unlock()
}

解锁的操作,会先调用 atomic.AddInt32(&rw.readerCount, rwmutexMaxReaders) 将恢复之前写入的负数,然后根据当前有多少个读操作在等待,循环唤醒

92. Go 读写锁的注意事项以及区别

注意点:

  • 读锁或写锁在 Lock() 之前使用 Unlock() 会导致 panic 异常。
  • 使用 Lock() 加锁后,再次 Lock() 会导致死锁(不支持重入),需 Unlock() 解锁后才能再加锁。
  • 锁定状态与 goroutine 没有关联,一个 goroutine 可以 RLock(Lock),另一个 goroutine 可以 RUnlock(Unlock)。

互斥锁和读写锁的区别:

  • 读写锁区分读者和写者,而互斥锁不区分。
  • 互斥锁同一时间只允许一个线程访问该对象,无论读写;读写锁同一时间内只允许一个写者,但是允许多个读者同时读对象。

93. Go 互斥锁是什么?

Go sync 包提供了两种锁类型:互斥锁 sync.Mutex 和读写互斥锁 sync.RWMutex,都属于悲观锁。

概念:

Mutex是互斥锁,当一个 goroutine 获得了锁后,其他 goroutine 不能获取锁(只能存在一个写者或读者,不能同时读和写)

使用场景:

多个线程同时访问临界区,为保证数据的安全,锁住一些共享资源,以防止并发访问这些共享数据时可能导致的数据不一致问题。

获取锁的线程可以正常访问临界区,未获取到锁的线程等待锁释放后可以尝试获取锁

在这里插入图片描述

http://www.yidumall.com/news/29646.html

相关文章:

  • seo网站优化价格成都网络营销公司排名
  • 免费注册域名的网站产品推广文案
  • windows 版 wordpress百度优化排名软件
  • 做公司网站成本百度电话
  • 成都网站建设招聘2023第二波疫情已经到来
  • 网站服务器 同步备份网络营销课程大概学什么内容
  • 政府网站集约化建设十分重要网站seo优化技巧
  • 淄博网站开发招聘如何在国外推广自己的网站
  • 太和县建设局网站在线收录
  • 做网站推广好做吗免费站推广网站2022
  • pc网站建设怎么做注册平台
  • 沈阳做机床的公司网站做网站seo怎么赚钱
  • 个人做网站名称可以随意更改吗广州关于进一步优化疫情防控措施
  • 沧州做网站公司最新今日头条
  • 广州做网站建设的公司哪家好1688精品货源网站入口
  • 深圳专业网站建设制作价格提升关键词
  • 新疆网站建设价格seo需要懂代码吗
  • b2c电商是什么意思seo网络推广经理招聘
  • 网站建设在医院的作用中国疫情今天最新消息
  • 刘家窑网站建设百度的搜索引擎优化
  • 网站视差怎么做国内免费建网站
  • 网站建设需要准备那些内容域名解析ip地址
  • 网站做预览文档域名查询网入口
  • 做网站的计划概要搜索引擎推广一般包括哪些
  • 新格建站定西seo排名
  • 成都网站建设外包太原seo网络优化招聘网
  • 动易手机网站模板电商产品推广方案
  • 网站建设操作系统阿里巴巴官网首页
  • 建网站北京企业做网上推广
  • 管理咨询公司注册资本专业的网站优化公司