最新消息:欢迎加入小松的QQ群一起讨论一起学习,搜索页面修改成lua+ElasticSearch,使用php这个页面速度相对慢一点,优化之后速度杠杠的,如有问题请加群联系我

RWMutex是读写锁

golang 47浏览 0评论

最近在看nsq源码,其中看到了下面的代码
代码清单 github.com/nsqio/nsq/nsqlookupd/nsqlookupd.go

type NSQLookupd struct {
    sync.RWMutex
    opts         *Options
    tcpListener  net.Listener
    httpListener net.Listener
    waitGroup    util.WaitGroupWrapper
    DB           *RegistrationDB
}

RWMutex是读写互斥锁。该锁可以被同时多个读取者持有或唯一个写入者持有。RWMutex可以创建为其他结构体的字段;零值为解锁状态。RWMutex类型的锁也和线程无关,可以由不同的线程加读取锁/写入和解读取锁/写入锁。

RWMutex提供了四个方法:

Lock方法将rw锁定为写入状态,禁止其他线程读取或者写入。
func (*RWMutex) Lock

Unlock方法解除rw的写入锁状态,如果m未加写入锁会导致运行时错误
func (*RWMutex) Unlock

RLock方法将rw锁定为读取状态,禁止其他线程写入,但不禁止读取。
func (*RWMutex) RLock

Runlock方法解除rw的读取锁状态,如果m未加读取锁会导致运行时错误。
func (*RWMutex) RUnlock

1、多个goroutine同时读
2、写的时候,啥也不能干。不能读也不能写

目前NSQLookupd里面发现写加锁和解锁

QQ交流群:136351212(满) 455721967

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» RWMutex是读写锁
本文链接地址:https://www.phpsong.com/3291.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!