双buffer防止 map读写并发

2023-11-13

package main

import (
	"fmt"
	"strconv"
	"sync"
)

var (
	s       [2]map[string]string
	current = 0
	wg      sync.WaitGroup
)

func w(s1 string) {
	tmpIndex := (current + 1) % 2
	if s[tmpIndex] == nil {
		s[tmpIndex] = make(map[string]string)
	}
	s[tmpIndex][s1] = s1
	current = tmpIndex
	fmt.Println(current)
}
func r() {
	for i := 0; i < 100; i++ {
		//fmt.Println(current, s[current])
	}
}

func main() {
	w("1")
	r()

	wg.Add(2)
	go func() {
		defer wg.Done()
		for i := 0; i < 100; i++ {
			//time.Sleep(5)
			r()
		}
	}()

	go func() {
		defer wg.Done()
		for i := 0; i < 5; i++ {
			//time.Sleep(5)
			w(strconv.Itoa(i))
		}
	}()
	wg.Wait()

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双buffer防止 map读写并发 的相关文章

  • golang-bufio 缓冲扫描

    前面两篇博客 介绍了 bufio 包中的缓冲读和写 bufio go 下面再来介绍一下缓冲扫描 scan go 这个扫描的是用来对缓存读的更高级封装 提供了一些更易用的方法 缓冲扫描 Scanner 提供了一个方便的接口来读取数据 例如使用
  • 七. go 常见数据结构实现原理之 反射

    目录 一 golang 是如何实现反射的 如何比较两个对象完全相等 一 golang 是如何实现反射的 参考博客Go 语言问题集 Go Questions Go 语言在 reflect 包里定义了各种类型 实现了反射的各种函数 通过它们可以
  • golang之跨语言ipc通信

    1 golang之跨语言ipc通信 文章目录 1 golang之跨语言ipc通信 1 1 unix domain Socket unix域套接字 介绍 1 2 IPC SOCKET通信 1 2 1 函数及地址定义介绍 1 2 2 UNIX
  • go Cobra命令行工具入门

    简介 Github https github com spf13 cobra Star 26 5K Cobra是一个用Go语言实现的命令行工具 并且现在正在被很多项目使用 例如 Kubernetes Hugo和Github CLI等 通过使
  • Golang连接Jenkins获取Job Build状态及相关信息

    文章目录 1 连接Jenkins 2 controller 3 module 4 router 5 效果展示 第三方包 gojenkins 方法文档 gojenkins docs 实现起来很简单 利用第三方库 连接jenkins 调用相关方
  • 【golang】error parsing regexp: invalid or unsupported Perl syntax (正则表达式校验密码)

    要在 Go 中编写密码校验规则 确保密码不少于8位且包含数字和字母 你可以使用正则表达式和 Go 的 regexp 包来实现 以下是一个示例代码 错误示范 package main import fmt regexp func valida
  • Go语言包管理(一)

    Go语言中的包 我们在使用其他语言 比如Java Python 都有类似包的概念 Go也不例外 其核心思想即为分组和模块化 人的大脑对庞大和复杂的事情很难掌控 可以对其采用分而治之的策略 使其模块化 从而更容易管理 如下是标准库中net包的
  • Go语言里面的各种疑难杂症

    什么是闭包 闭包有什么缺陷 func AddUpper func int int var n int 10 return func x int int n n x return n func main f AddUpper fmt Prin
  • goland环境配置

    goland modules环境配置 下载和安装goland 环境配置 配置环境变量GOPATH 配置go modules GOPROXY代理的系统变量 工程目录中新建三个工作目录 goland中启用go modules 新建一个go程序
  • Go 语言注释教程

    注释是在执行时被忽略的文本 注释可用于解释代码 使其更易读 注释还可用于在测试替代代码时防止代码执行 Go支持单行或多行注释 Go单行注释 单行注释以两个正斜杠 开头 在 和行尾之间的任何文本都将被编译器忽略 不会被执行 示例 This i
  • 基于Go语言实现简易Web应用

    目录 前言 Go语言特点 写在使用Go语言实现Web应用前面 创建Web服务器 声明一个结构体操作 加入中间件的使用 使用静态文件服务器 最后 前言 在编程语言中 近几年问世的几个新语言都是非常不错的 比如Go Python Rust等等
  • 为什么最近听说 Go 岗位很少很难?

    大家好 我是煎鱼 其实这个话题已经躺在我的 TODO 里很久了 近来很多社区的小伙伴都私下来交流 也有在朋友圈看到朋友吐槽 Go 上海的大会没什么人 还不如 Rust 大会 比较尴尬 今天主要是看看为什么 Go 岗位看起来近来很难的样子 也
  • Go 程序编译过程(基于 Go1.21)

    版本说明 Go 1 21 官方文档 Go 语言官方文档详细阐述了 Go 语言编译器的具体执行过程 Go1 21 版本可以看这个 https github com golang go tree release branch go1 21 sr
  • 【go语言开发】Minio基本使用,包括环境搭建,接口封装和代码测试

    本文主要介绍go语言使用Minio对象存储 首先介绍搭建minio 创建bucket等 然后讲解封装minio客户端接口 包括但不限于 上传文件 下载 获取对象url 最后测试开发的接口 文章目录 前言 Minio docker安装mini
  • 【go语言开发】loglus日志框架的使用

    本文将简单介绍loglus框架的基本使用 并给出demo 文章目录 前言 Loglus常见用法 自定义日志级别 使用字段钩子 输出到多个位置 使用钩子实现自定义日志处理 demo
  • go-zero 开发入门-加法客服端示例

    定义 RPC 接口文件 接口文件 add proto 的内容如下 syntax proto3 package add 当 protoc gen go 版本大于 1 4 0 时需加上 go package 否则编译报错 unable to d
  • GoLong的学习之路,进阶,微服务之序列化协议,Protocol Buffers V3

    这章是接上一章 使用 RPC包 序列化中没有详细去讲 因为这一块需要看的和学习的地方很多 并且这一块是RPC中可以说是最重要的一块 也是性能的重要影响因子 今天这篇主要会讲其使用方式 文章目录 Protocol Buffers V3 背景以
  • go开发--操作mysql数据库

    在 Go 中访问 MySQL 数据库并进行读写操作通常需要使用第三方的 MySQL 驱动 Go 中常用的 MySQL 驱动有 github com go sql driver mysql 和 github com go xorm xorm
  • [每周一更]-(第55期):Go的interface

    参考地址 https juejin cn post 6978322067775029261 https gobyexample com interfaces https go dev tour methods 9 介绍下Go的interfa
  • 【go语言】读取toml文件

    一 简介 TOML 全称为Tom s Obvious Minimal Language 是一种易读的配置文件格式 旨在成为一个极简的数据序列化语言 TOML的设计原则之一是保持简洁性 易读性 同时提供足够的灵活性以满足各种应用场景 TOML

随机推荐

  • JavaScript的OO思想(一)

    类class是Object Oriented面向对象的语言有一个标志 通过类我们可以创建任意多个具有相同属性和方法的对象 JavaScript中没有类的概念 但它也是面向对象的 只是实现方法会有所不同 创建单个对象有两种基本方法 1 使用O
  • 从平面设计转行软件测试,喜提11K+13薪,回头看看我很幸运

    如何能够成为一个优秀的人 答 一以贯之的努力 不得懈怠的人生 每天的微小积累会决定最终结果 对待未来 人生与知识的敬意 永远值得我们学习 前言 我是2020年数字媒体技术专业毕业的 转行软件测试之前做的是平面设计 毕业的时候 我并不知道有软
  • transformers库的使用【一】——pipeline的简单使用

    transformers库的使用 使用pipeline API来快速使用一些预训练模型 使用预训练模型最简单的方法就是使用pipeline transformers提供了一些任务 1 情感分析 Sentment analysis 分析文本是
  • upload-labs

    在打本靶场之前 首先写一个一句话木马 关闭计算机的安全防护 不然计算机会杀掉 配合蚁剑可进行进一步操作 注 为避免部分题目可能无法实现 这里推荐使用phpstudy2016进行操作 目录 Pass 01 Pass 02 Pass 03 Pa
  • ethereumjs/ethereumjs-util

    ethereumjs ethereumjs util Most of the string manipulation methods are provided by ethjs util 更多的字符串处理方法可以看ethjs util ad
  • 几个常用的图片处理和图像识别API

    鸟类识别 http www inspirvision cn www product 支持鸟类品种鉴别 不同种类鸟类检测 鸟类数量统计 提供API Camera360 https github com pinguo PGSkinPrettif
  • [ kubernetes ] 基础名词解释

    Service RC RS和Deployment只是保证了支撑服务的微服务Pod的数量 但是没有解决如何访问这些服务的问题 一个Pod只是一个运行服务的实例 随时可能在一个节点上停止 在另一个节点以一个新的IP启动一个新的Pod 因此不能以
  • 跨域性的常识性推理

    跨域性的常识性推理是指在不同领域或知识领域之间进行推理和迁移的能力 它涉及将已有的知识和经验应用于新的情境或领域 以生成新的推理和理解 以下是关于跨域性常识性推理的一些常见观点 基础知识迁移 跨域性常识性推理可以帮助我们将基础知识从一个领域
  • 深度学习的发展方向: 深度强化学习!

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 作者 莫凡 马晶敏 上海交通大学 转载自 Datawhale 深度学习不够智能 强化学习又太抽象 深度强化学习是两套理论体系乘风破浪以后的成团产物 其骨架来自强化学习 而
  • 整理了适合新手的20个Python练手小程序

    100个Python练手小程序 学习python的很好的资料 覆盖了python中的每一部分 可以边学习边练习 更容易掌握python 本文附带基础视频教程 私信回复 基础 就可以获取的 程序1 题目 有1 2 3 4个数字 能组成多少个互
  • 通过poi+java实现Excel表格的列宽度自适应

    新建sheet同时往sheet加入数据后 进行列宽设置 代码如下 固定首行 下拉时实现首行固定不动 sheet createFreezePane 0 1 0 1 列宽自适应 outputList get 0 size 为首行的列数 根据首行
  • web容器与servlet容器的区别

    servlet容器 负责管理servlet生命周期 web容器 负责管理和部署web应用 其本身可能具备servlet容器组件 如果没有 一般能将第三方servlet容器作为组件整合进web容器 1 web容器好比电视机 servlet容器
  • Hibernate(二)——一对多查询

    1 前言 本章节我们讨论Hibernate一对多查询的处理 在上一章节中 Hibernate 一 入门 我们探讨了Hibernate执行最基本的增删改查操作 现在我们将情况复杂化 加入我们在查询用户信息的时候需要同时查询其登录日志 这样就涉
  • 七、MySql-锁与事物

    MySql 锁与事物 锁 锁的简介 为什么需要锁 锁的概念 MySQL 中的锁 表锁与行锁的使用场景 MyISAM 锁 共享读锁 独占写锁 总结 InnoDB 锁 语法 注意 锁的等待问题 事务 什么存储引擎支持事务 事务特性 原子性 at
  • PyQt5接入高德地图搜索API出现Request Failed提示

    PyQt5接入高德地图搜索API出现Request Failed提示 Dcan1994的博客 CSDN博客 pyqt5 加载高德地图 PyQt5接入高德地图搜索功能API Windows版本 10 Python版本 3 6 5 高德地图AP
  • VC怎样调用COM控件的接口函数

    COM库函数 利用COM库函数使用代码组件的方法是本文介绍的三种方法中实现起来最麻烦和困难的方法 它要求开发人员必须具有对COM原理的深入理解 该方法实现步骤如下 1 首先添加COM初始和终止代码 在应用程序类的初始化实例函数InitIns
  • 跨时钟域信号传输(一)——控制信号篇

    1 跨时钟域与亚稳态 跨时钟域通俗地讲 就是模块之间有数据交互 但是模块用的不是同一个时钟进行驱动 如下图所示 左边的模块1由clk1驱动 属于clk1的时钟域 右边的模块2由clk2驱动 属于clk2的时钟域 当clk1比clk2的频率高
  • 线性代数 --- 什么是高斯消元法,什么又是高斯-若尔当消元法?

    高斯 若尔当消元法 写在最前面 我这个人比较喜欢炫耀 尤其发现别人在我面前炫耀的时候 我就会试图用我所学的知识盖过他的锋芒 所以呢 当初在Gilbert string老爷爷的课程里面第一次听到高斯若尔当这个词汇的时候 整个人就炸了 为什么我
  • 【计算机视觉

    文章目录 一 检测相关 11篇 1 1 Benchmarking Anomaly Detection System on various Jetson Edge Devices 1 2 High Performance Fine Defec
  • 双buffer防止 map读写并发

    package main import fmt strconv sync var s 2 map string string current 0 wg sync WaitGroup func w s1 string tmpIndex cur