[Go] 使用读写锁对map资源进行安全处理

[Go] 使用读写锁对map资源进行安全处理,第1张

概述当需要有一个全局性的map集合资源进行增删改数据时,需要对该map资源增加读写锁,防止并发时出现安全问题 下面的类就是举例 , 属性中的Conns模拟存储一些资源,对这些资源进行并发的增加数据,使用写

当需要有一个全局性的map集合资源进行增删改数据时,需要对该map资源增加读写锁,防止并发时出现安全问题

下面的类就是举例 , 属性中的Conns模拟存储一些资源,对这些资源进行并发的增加数据,使用写锁锁住资源,当读取是使用读锁锁住资源

package snetimport "sync"import errorstype Connmanger struct {    Conns    map[uint32]string    ConnLock sync.RWMutex}func NewConnmanger() *Connmanger {    cm := &Connmanger{        Conns: make(map[uint32]),}    return cm}func (cm *Connmanger) Add(ID uint32,value ) {    cm.ConnLock.Lock()    defer cm.ConnLock.Unlock()    cm.Conns[ID] = value}func (cm *Connmanger) Remove(ID uint32) {    cm.ConnLock.Lock()    defer cm.ConnLock.Unlock()    delete(cm.Conns,)}func (cm *Connmanger) Get(ID uint32) (,error) {    cm.ConnLock.RLock()    defer cm.ConnLock.RUnlock()    conn,ok := cm.Conns[]    if !ok {        return "",errors.New(connmanager get conn error )    }    return conn,nil}func (cm *Connmanger) Len() int {    return len(cm.Conns)}func (cm *Connmanger) Clean() {    cm.ConnLock.Lock()    defer cm.ConnLock.Unlock()    for key,_ := range cm.Conns {        delete(cm.Conns,key)    }}

使用时

package mainimport single/snetlogstrconvfunc main()  {    cm:=snet.NewConnmanger()    var wg .WaitGroup    for i:=0;i<10;i++{        go func(i uint32){            defer wg.Done()            wg.Add(1)            cm.Add(i,连接"+strconv.Itoa((i)))        }(uint32(i))    }    wg.Wait()    log.Println(cm.Len())    range cm.Conns{        log.Println(key,value)    }    cm.Clean()    log.Println(cm.Len())    select{}}

 

总结

以上是内存溢出为你收集整理的[Go] 使用读写锁对map资源进行安全处理全部内容,希望文章能够帮你解决[Go] 使用读写锁对map资源进行安全处理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1257278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存