golang的map读写都在一个函数里面完成如何加锁啊?

这段代码我看懂了

type Demo struct {

  Data map[string]string 

  Lock sync.RwMutex

}

func (d Demo) Get(k string) string{

  d.Lock.RLock()

  defer d.Lock.RUnlock()

  return d.Data[k]

}

func (d Demo) Set(k,v string) {

  d.Lock.Lock()

  defer d.Lock.UnLock()

  d.Data[k]=v

}

现在我的读写都在一个函数里面完成,先获取,如果存在直接取出来,如果不存在,计算后赋值,下次再取就直接取了

阅读 2.9k
3 个回答

写锁的等级比读锁高的.

你只要先执行
d.Lock.Lock()

然后进行读操作和写操作

最后d.Lock.UnLock() 就可以了。

该 Demo 结构里的 Set 和 GET 操作都已经加了锁的,你在使用 demo.Get() 和 demo.Set() 的时候不需要再加锁了。 (假设 demo 是 Demo 的有给实例)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题