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

中山移动网站建设多少钱asp+access网站开发实例精讲

中山移动网站建设多少钱,asp+access网站开发实例精讲,网页设计制作费用多少,唐山做网站公司RWMutex 读写锁相较于互斥锁有更低的粒度#xff0c;它允许并发读#xff0c;因此在读操作明显多于写操作的场景下能减少锁竞争的次数#xff0c;提高程序效率。 type RWMutex struct {w Mutex // held if there are pending writerswriterSem uint32 // sem…RWMutex 读写锁相较于互斥锁有更低的粒度它允许并发读因此在读操作明显多于写操作的场景下能减少锁竞争的次数提高程序效率。 type RWMutex struct {w Mutex // held if there are pending writerswriterSem uint32 // semaphore for writers to wait for completing readersreaderSem uint32 // semaphore for readers to wait for completing writersreaderCount int32 // number of pending readersreaderWait int32 // number of departing readers }RWMutex 结构体中包含五个字段分别表示 w: 复用互斥锁writerSem 和 readerSem: 用于写等待读和读等待写的信号量readerCount:readerWait: 等待写锁释放的读者数量 读锁 RLock 当有 goroutine 写时是不允许读的这时会把 readerCount 设置为负这时读 goroutine 应该被阻塞 func (rw *RWMutex) RLock() {if atomic.AddInt32(rw.readerCount, 1) 0 {// 阻塞读runtime_SemacquireMutex(rw.readerSem, false, 0)} }RUnlock 读锁解锁时只需要将 readerCount - 1, 如果结果小于零说明 原来 readerCount 0 || readerCount -rwmutexMaxReaders, 对未加锁的对象执行了解锁操作原来 readerCount 0, 有正在执行的写操作 func (rw *RWMutex) RUnlock() {if r : atomic.AddInt32(rw.readerCount, -1); r 0 {// Outlined slow-path to allow the fast-path to be inlinedrw.rUnlockSlow(r)} }func (rw *RWMutex) rUnlockSlow(r int32) {if r1 0 || r1 -rwmutexMaxReaders {race.Enable()throw(sync: RUnlock of unlocked RWMutex)}// 所有读操作结束后触发写的写信号量if atomic.AddInt32(rw.readerWait, -1) 0 {// The last reader unblocks the writer.runtime_Semrelease(rw.writerSem, false, 1)} }写锁 Lock func (rw *RWMutex) Lock() {// 获取互斥写锁rw.w.Lock()// 阻塞读r : atomic.AddInt32(rw.readerCount, -rwmutexMaxReaders) rwmutexMaxReaders// 如果有人在读需要等待读锁释放if r ! 0 atomic.AddInt32(rw.readerWait, r) ! 0 {// 阻塞等待读锁释放runtime_SemacquireMutex(rw.writerSem, false, 0)} }Lock 会先通过互斥锁阻塞写操作然后禁止读锁获取等待已经持有读锁的 goroutine 释放读锁这样可以避免连续的写操作使读陷入饥饿。 Unlock func (rw *RWMutex) Unlock() {// 重新允许读锁获取r : atomic.AddInt32(rw.readerCount, rwmutexMaxReaders)if r rwmutexMaxReaders {race.Enable()throw(sync: Unlock of unlocked RWMutex)}// 触发等待中的写锁的信号量for i : 0; i int(r); i {runtime_Semrelease(rw.readerSem, false, 0)}// 互斥锁解锁rw.w.Unlock() }总结 在极端情况下 如果完全没有写读锁加锁只是将 readerCount 加一解锁只是将其减一不存在锁竞争。如果只有写加锁和解锁都比互斥锁多了一个对 readerCount 取反操作 在一般情况下读锁在获取锁前会检查 readerCount, 如果为负说明有人在写则进入阻塞状态等待 readerSem 的信号写锁获取锁在得到互斥锁后会先设置 readerCount 为负阻止新的读者获取读锁然后需要等待所有已经持有读锁的 goroutine 释放读锁这里使用的是 readerWait 当 readerCount 为负时如果读锁被释放该量就会减一当 readerWait 0 时则说明所有在写锁获取之前获得的读锁都被释放了最后一个释放的读锁会通过 writerSem 通知写对象。 写锁释放时需要通过 readerSem 信号触发所有阻塞中的写对象。
http://www.sadfv.cn/news/433707/

相关文章:

  • 外贸网站建设介绍在wordpress官网建站
  • 南宁 网站建设开发小程序商城的费用
  • asp.net网站配置文件软件界面设计的原则
  • 英文版网站建设的意义做pc端网站价位
  • 杭州网站推广优化网络管理系统的层次结构
  • 建筑导航网站什么是静态网页
  • 做商城网站的流程重庆市两江新区建设管理局网站
  • 沧州有做网站的吗虚拟主机怎么弄网站
  • 网站开发系统论文做加油机公司网站
  • 宁河网站建设盐城市住房和城乡建设局门户网站
  • 网站建设要架服务器网络架构有几层
  • 网站开发用到的技术学习电子商务网站建设与管理
  • 个人网站建设策划书怎么写wordpress置顶文章失效
  • 网站后台内容管理如何创建微网站
  • 怎么做自己的html网站网络域名大全
  • 商业网站设计的基本原则js菜鸟教程
  • 喀什百度做网站多少钱建设网站二级建造师如何解聘
  • 赣州酒店网站设计公司网站建设工作总结
  • 辛巴否认电商干垮实体河北廊坊seo网站建设网站优化
  • 上海建设主管部门网站建设银行网站查询密码设置
  • 怎么查域名备案信息山东服务好的seo
  • 企业类网站国外在线网站建设平台
  • 怎样做娱乐网站西宁建设厅培训中心网站
  • 企业网站 生成html网站宣传视频
  • 省级门户网站建设seo网站三要素怎么做
  • 建设网站证书查询dedecms蓝色企业网站模板免费下载
  • 电商做网站大连网络推广宣传
  • 详细论述制作网站的步骤泉州网站制作案例
  • 婴儿网站模板网站图片属性是什么
  • 网站建设 资讯网站建设举报