自学内容网 自学内容网

《零基础Go语言算法实战》【题目 2-28】读写不安全问题

《零基础Go语言算法实战》

【题目 2-28】读写不安全问题

请说出下面的代码存在什么问题。

package main

import "sync"

type UserAges struct {

 ages map[string]int

 sync.Mutex

}

func (ua *UserAges) Add(name string, age int) {

 ua.Lock()

 defer ua.Unlock()

 ua.ages[name] = age

}

func (ua *UserAges) Get(name string) int {

 if age, ok := ua.ages[name]; ok {

 return age

 }

 return -1

}

【解答】

在执行 Get()方法时可能会抛出异常,因为map是并发读写,并不安全。map属于引用类型,

并发读写时多个 goroutine 通过指针访问同一个地址,即访问共享变量,此时同时读写资源将

存在竞争关系。可能会报错误信息“fatal error: concurrent map read and map write”。因此,在

Get() 方法中也需要加锁,建议使用读写锁 sync.RWMutex。

d29f6752458d4ff3989d14264d0e36f6.png

 


原文地址:https://blog.csdn.net/qq_39728668/article/details/145133296

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!