当前位置: 首页 > article >正文

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

 


http://www.kler.cn/a/507126.html

相关文章:

  • 【Block总结】掩码窗口自注意力 (M-WSA)
  • Python语言的编程范式
  • Jmeter配置服务代理器 Proxy(二)
  • Rust 强制类型转换和动态指针类型的转换
  • GCN详细介绍:原理、主要应用
  • 基于springboot的自习室预订系统
  • arm使用ubi系统
  • windows10 安装 Golang 版本控制工具g与使用
  • Gartner预测2025年关键基础设施的CPS安全:确保机器人、无人机、自动驾驶汽车、人工智能等前沿技术应用和新场景安全
  • 【Flink系列】6. Flink中的时间和窗口
  • web前端第八次作业---制作音乐榜单
  • Unity WebGL:本机部署,运行到手机
  • 手摸手系列之 Java 通过 PDF 模板生成 PDF 功能
  • 专业140+总分410+宁波大学829信号与系统考研经验宁大电子信息与通信工程,真题,大纲,参考书。
  • 卷积神经网络的底层是傅里叶变换
  • CSS中的accent-color如何使用
  • SQL Server查询计划操作符——查询计划相关操作符(4)
  • Swift 专题二 语法速查
  • 如何调用短信服务接口给自己的网站设置短信验证码功能
  • IntelliJ IDEA:享受高效的 JAVA 开发
  • 苹果电脑怎么清理后台,提升苹果电脑运行速度
  • 如何在浏览器前端运行Python程序
  • C#与Vue2上传下载Excel文件
  • 《Keras 3 神经网络紧凑型卷积转换器(Transformers)》
  • 【python小知识】安装ta-lib遇到的问题
  • RabbitMQ中有哪几种交换机类型?