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

《零基础Go语言算法实战》【题目 2-30】并发安全问题

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

【题目 2-30】并发安全问题

请举例说明如何在 Go 语言的 map 中保证并发安全,且需要实现以下接口:

type sp interface {

 Out(key string, val interface{})

}

【解答】

题目中要求并发安全,那么必须用锁,还要实现多个 goroutine 在读的时候如果值不存在

则阻塞,直到写入值,那么每个键值都需要有一个阻塞 goroutine 的通道。实现如下:

type Map struct {

 c map[string]*entry

 rmx *sync.RWMutex

}

type entry struct {

 ch chan struct{}

 value interface{}

69

零基础

Go语言算法实战

70

 isExist bool

}

func (m *Map) Out(key string, val interface{}) {

 m.rmx.Lock()

 defer m.rmx.Unlock()

 item, ok := m.c[key]

 if !ok {

 m.c[key] = &entry{

 value: val,

 isExist: true,

 }

 return

 }

 item.value = val

 if !item.isExist {

 if item.ch != nil {

 close(item.ch)

 item.ch = nil

 }

 }

 return

}

 


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

相关文章:

  • salesforce在opportunity的opportunity products页面增加一个按钮,可以批量删除products
  • 利用爬虫获取某学习软件的考试题库(带源码)
  • 图论的起点——七桥问题
  • 什么是基础镜像
  • 【Linux 36】多路转接 - epoll
  • 使用 Charles 调试 Flutter 应用中的 Dio 网络请求
  • 项目太大导致 git clone 失败
  • 前端小知识 鼠标穿透 pointer-events: none;
  • Vue快速开发之环境搭建nodejs与运行第一个Vue项目
  • docker的数据卷与dockerfile自定义镜像
  • Golang—— error 和 panic
  • [私用学习笔记·突击面试]Collection和迭代器
  • 图论的起点——七桥问题
  • 软件测试入门—测试流程之需求分析
  • Pycharm报错:DeprecationWarning: sipPyTypeDict() is deprecated
  • react 与 vue 的比较,以及如何选择?
  • 使用 spring boot 2.5.6 版本时缺少 jvm 配置项
  • 持续集成 02|Jenkins介绍与安装、Postman集成Jenkins、代码集成Jenkins
  • 【网络协议】DHCP(动态主机配置协议)
  • 单片机的原理及其应用:从入门到进阶的全方位指南
  • iis强制重定向https
  • 出差人员携带的电脑文件信息安全如何保障?
  • 校园跑腿小程序---任务界面 发布以及后端模板下载
  • react中的hook
  • 浅谈云计算10 | 服务器虚拟化支撑技术(长文)
  • Spring Boot启动流程详解与技术探讨