久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    golang map 讀寫鎖與深度拷貝的坑

     飲茶仙人 2020-02-10

    0X01

    golang中,map(字典)無法并發讀寫

    簡單來說,新建萬條線程對同一個map又讀又寫,會報錯。

    為此,最好加鎖,其實性能影響并不明顯。

    type taskCache struct{
        sync.RWMutex
        data map[string] interface{}
    }

     

     

    0X02

    golang中,map(字典)為引用拷貝。

    a = 字典一

    b = a 

    實際上是直接將指針傳給了b。

     

    于是,有一個讀取,寫的時候直接讀map并返回

    復制代碼
    func GetAllTasks() (result map[string]interface{}, err error) {
        // 獲得當前的所有任務
        DEMO.RLock()
        defer DEMO.RUnlock()
        return DEMO.data, err
    }
    復制代碼

    而在線程中

    // 接收后直接打印
    fmt.Println(store.GetAllTasks())

    結果居然報錯,map讀寫沖突。

     

    于是,我返回去一遍一遍看代碼,覺得自己的讀寫鎖寫錯了。

    調式折騰了半天,最后發現,在接收后不用 fmt.Println 打印就不會報錯。

    這很不科學,然后在接收打印前后加上讀鎖,不報錯了。

     

    0X03

    所以golang,加了讀寫鎖的時候,要返回全部值,還不能直接返回這個字典,因為直接返回這個字典,返回了指針,操作的時候要不還要加讀寫鎖,要不就報錯。

    還沒有直接的取地址的值重新給另一個變量的東西,自己寫個遍歷,一個一個賦值吧,蛋疼,坑貨,坑了一晚上

    var cache = make(map[string]interface{})
    for k,v := range Demo.data{
        cache[k] = v
    }

     

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 综合激情亚洲丁香社区| 久久超碰色中文字幕超清| 人人人澡人人肉久久精品| 国产欧美丝袜在线二区| 日本乱偷人妻中文字幕在线| 亚洲av成人一区在线| 亚洲性色AV一区二区三区| 欧美交a欧美精品喷水| 99欧美日本一区二区留学生| 亚洲欧美日韩国产精品专区| 国产玩具酱一区二区三区 | 国产成人无码A区在线观| 国产真人无码作爱视频免费| 国产午精品午夜福利757视频播放| 久久婷婷综合色丁香五月| 亚洲欧美日韩在线码| 精品无码国产自产拍在线观看| 国产精品午夜福利视频| 日韩精品无码一区二区三区AV| 一区二区不卡国产精品| 欧美精品亚洲精品日韩专区 | 一級特黃色毛片免費看| AV无码中文字幕不卡一二三区| 日韩大片高清播放器大全| 99久久无码私人网站| 国产精品爽黄69天堂A| 亚洲国模精品一区二区| 国产欧美日韩VA另类在线播放 | 国产破外女出血视频| 99久久99久久加热有精品| 日本高清视频色欧WWW| 一本av高清一区二区三区| 狠狠色狠狠色综合网| 亚洲成年轻人电影网站WWW| 双乳奶水饱满少妇呻吟免费看| 欧美激情一区二区久久久| 婷婷色爱区综合五月激情韩国| 最新中文字幕国产精品| 国产精品一区二区手机在线观看| 免费看成人毛片无码视频| 午夜免费无码福利视频麻豆|