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

devtools/2025/1/17 22:28:43/

《零基础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

 


http://www.ppmy.cn/devtools/151376.html

相关文章

1.15寒假作业

web:nss靶场ez_ez_php 打开环境,理解代码 使用个体传参的方法,首先代码会检查file参数的前三个字符是不是php,如果是就输出nice,然后用include函数包含file,绕过不是则输出hacker,如果没有file…

区块链技术在商贸物流中的变革性作用:透明、安全与高效

区块链技术在商贸物流中的变革性作用:透明、安全与高效 在当今全球化的商业环境中,商贸物流作为商品流通的关键环节,其高效运作对于企业的竞争力和消费者的满意度至关重要。然而,传统商贸物流存在着诸多痛点,如信息不…

leetcode Heap/Queue

3066. 超过阈值的最少操作数 II 输入:nums [2,11,10,1,3], k 10 输出:2 解释:第一次操作中,我们删除元素 1 和 2 ,然后添加 1 * 2 2 到 nums 中,nums 变为 [4, 11, 10, 3] 。 第二次操作中,…

【Qt】03-页面切换

前言一、按键实现界面切换1.1 创建新的类文件1.1.1 创建1.1.2 细节选择 1.2 代码以及需要注意的点mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h 1.3 结果展示 二、signal关键字2.1 代码以及解释mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h解释 2.2 现象 三…

软考信安20~数据库系统安全

1、数据库安全概况 1.1、数据库安全概念 数据库是网络信息系统的基础性软件,承载着各种各样的数据,成为应用系统的支撑平台。 国外主流的数据库系统有MSSQL 、MySQL 、Oracle 、DB2 等,国产数据库系统主要有人大金仓、达梦等。 1.2、数据库安全威胁 授权的误用(Misuses…

C# OpenCV机器视觉:二维码识别

在一个风平浪静却又暗藏玄机的午后,阿辉正坐在他那堆满各种电子元件和代码书籍的办公桌前,对着电脑屏幕上那一串串神秘的代码发呆。突然,手机铃声如同一道尖锐的闪电划破了平静的空气,吓得他差点把手里的咖啡杯打翻。原来是公司的…

LeetCode 916. Word Subsets

🔗 https://leetcode.com/problems/word-subsets 题目 给两个字符串数组,word1 和 word2若每一个 word2 中的字符串,都是字符串 x 的 subset,则表示该字符串 x 是 universal 的返回 word1 中的 universal 的字符串 思路 对 wo…

晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版

晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…