首页 > 其他分享 >go手动添加锁=安全

go手动添加锁=安全

时间:2023-03-01 14:24:03浏览次数:50  
标签:map func int 手动 添加 key go concurentMat

package main

import (
    "fmt"
    "sync"
    "time"
)

// 为了解决线程不安全,我们自己加锁

type  concurentMat struct {
    mp map[int]int
    sync.RWMutex
}

// 通过set方法做原有map的赋值
func (c *concurentMat)Set(key, v int)  {
    // 添加写锁
    c.Lock()
    c.mp[key] = v
    c.Unlock()

}
// 通过get方法做原有map的读取值
func (c *concurentMat)Get(key int) int{
    c.RLock()
    r := c.mp[key]
    c.RUnlock()
    return r
}

func main(){

    c := concurentMat{
        mp: make(map[int]int),

    }
    // 并发一个线程循环写

    go func() {
        for i:= 0; i< 1000; i++ {
            c.Set(i, i)
        }
    }()


    go func() {
        for i:= 0; i< 1000; i++ {
            ret := c.Get(i)
            fmt.Println(i, ret)
        }
    }()
    time.Sleep(1 * time.Second)



}

 

标签:map,func,int,手动,添加,key,go,concurentMat
From: https://www.cnblogs.com/wuyongcong/p/17168015.html

相关文章

  • Django+vue 解决cookie跨域不携带问题
    Django+vue解决cookie跨域不携带问题问题描述使用djangosession保存用户登入的token,django会将sessionid通过cookie传到浏览器,用户下一次请求的时候带着cookie访问后端......
  • 纯代码实现用户添加自定义头像功能
    WordPress系统默认使用Gravatar头像,对国内用户来说很不友好,要实现本地上传自定义头像功能,安装插件SimpleLocalAvatars即可,也可以把这个插件的功能代码移植到主题。插件......
  • Go组件库总结之事件注册唤醒
    本篇文章我们用Go实现一个自定义事件注册并等待唤醒的机制,其中涉及到的链表操作可以参考上一篇文章。文章参考自:https://github.com/brewlin/net-protocol1.自定义唤醒事......
  • 【读书笔记&个人心得】第13章:协程 (goroutine) 与通道 (channel)
    协程(goroutine)与通道(channel)Go语言为构建并发程序的基本代码块是协程(goroutine)与通道(channel)。他们需要语言,编译器,和runtime的支持。Go语言提供的垃圾......
  • 【读书笔记&个人心得】第1章:Go 语言的起源,发展与普及
    起源与发展2010年5月:谷歌投入使用官网的首页有一个功能叫做GoPlayground,是一个Go代码的简单编辑器的沙盒,它可以在没有安装Go语言的情况下在你的浏览器中编译并......
  • (转)数据结构和算法(Golang实现)(8.2)基础知识-分治法和递归
    原文:https://juejin.cn/post/6844904132378263565分治法和递归在计算机科学中,分治法是一种很重要的算法。字面上的解释是分而治之,就是把一个复杂的问题分成两个或更多......
  • go options 模式
    ...函数式选项模式的使用场景有哪些呢:我们一般用来配置一些基础的服务配置,比如MySQL,Redis,Kafka的配置,很多可选参数,可以方便动态灵活的配置想要配置的参数。https://zhuan......
  • go 语言 写法
    为了很久之后能快速回顾GO的写法特意记录一下1:go可以隐式声明  :=  (可以不跟类型) 类似   var变量名变量类型  变量名:=变量值(声明时go会自动判断......
  • CentOS7.6 添加系统自启脚本
    一、编辑脚本1.在自定义的脚本中添加#chkconfig:2352080#chkconfig:23452080 其中2345是默认启动级别,全部0-6共有7个级别。0表示:表示......
  • HTML页面自动清理js、css文件的缓存(自动添加版本号)
    在web项目开发过程中,我们经常会引用css、js文件,更新文件后常出现缓存问题(明明更改了代码,在浏览器上访问的时候却没有发生变化),这种情况我们通常采用以下两种解决方案:1、手......