zoukankan      html  css  js  c++  java
  • go语言坑之并发访问map

    fatal error: concurrent map read and map write


    并发访问map是不安全的,会出现未定义行为,导致程序退出。所以如果希望在多协程中并发访问map,必须提供某种同步机制,一般情况下通过读写锁sync.RWMutex实现对map的并发访问控制,将map和sync.RWMutex封装一下,可以实现对map的安全并发访问,示例代码如下:
     
    package main
    
    import "sync"
    
    type SafeMap struct {
        sync.RWMutex
        Map map[int]int
    }
    
    func main() {
        safeMap := newSafeMap(10)
    
        for i := 0; i < 100000; i++ {
            go safeMap.writeMap(i, i)
            go safeMap.readMap(i)
        }
    
    }
    
    func newSafeMap(size int) *SafeMap {
        sm := new(SafeMap)
        sm.Map = make(map[int]int)
        return sm
    
    }
    
    func (sm *SafeMap) readMap(key int) int {
        sm.RLock()
        value := sm.Map[key]
        sm.RUnlock()
        return value
    }
    
    func (sm *SafeMap) writeMap(key int, value int) {
        sm.Lock()
        sm.Map[key] = value
        sm.Unlock()
    }
  • 相关阅读:
    浏览器
    背景图片设置
    用CSS画平行四边形
    git常用操作
    函数Function
    Object类型的创建和访问
    执行环境及作用域
    传值和传引用
    String类型
    HTML< legend >标签
  • 原文地址:https://www.cnblogs.com/smallleiit/p/11120430.html
Copyright © 2011-2022 走看看