好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang中使用sync.Map的方法

golang中使用sync.Map的方法

熱門標簽:地圖標注測試 廣東語音外呼系統供應商 濮陽自動外呼系統代理 福州鐵通自動外呼系統 烏魯木齊人工電銷機器人系統 澳門防封電銷卡 智能電銷機器人營銷 長沙ai機器人電銷 賺地圖標注的錢犯法嗎

背景

go中map數據結構不是線程安全的,即多個goroutine同時操作一個map,則會報錯,因此go1.9之后誕生了sync.Map

sync.Map思路來自java的ConcurrentHashMap

接口

sync.map就是1.9版本帶的線程安全map,主要有如下幾種方法:

Load(key interface{}) (value interface{}, ok bool)
//通過提供一個鍵key,查找對應的值value,如果不存在,則返回nil。ok的結果表示是否在map中找到值

Store(key, value interface{})
//這個相當于是寫map(更新或新增),第一個參數是key,第二個參數是value

LoadOrStore(key, value interface{}) (actual interface{}, loaded bool)
//通過提供一個鍵key,查找對應的值value,如果存在返回鍵的現有值,否則存儲并返回給定的值,如果是讀取則返回true,如果是存儲返回false

Delete(key interface{})
//通過提供一個鍵key,刪除鍵對應的值

Range(f func(key, value interface{}) bool)
//循環讀取map中的值。
//因為for ... range map是內置的語言特性,所以沒有辦法使用for range遍歷sync.Map, 但是可以使用它的Range方法,通過回調的方式遍

實踐

package main

import (
	"fmt"
	"sync"
)

var num = 0
var addTest *AddTest

func init() {
	addTest = AddTest{}
}

type AddTest struct {
	m sync.Mutex
}

func (at *AddTest) increment(wg *sync.WaitGroup) {
	//互斥鎖
	at.m.Lock() //當有線程進去進行加鎖
	num++
	at.m.Unlock() //出來后解鎖,其他線程才可以進去
	wg.Done()
}

func (at *AddTest) decrement(wg *sync.WaitGroup) {
	//互斥鎖
	at.m.Lock() //當有線程進去進行加鎖
	num--
	at.m.Unlock() //出來后解鎖,其他線程才可以進去
	wg.Done()
}

var w sync.WaitGroup

var aa map[int]int

func main() {
	var bb sync.Map
	var wg sync.WaitGroup
	//aa = make(map[int]int)
	wg.Add(2)
	go func() {
		//wg.Add(1)
		for i:=0 ;i 100; i++{
			//aa[i] = i+1
			//fmt.Println("a")
			bb.Store(i, i+1)
		}
		wg.Done()
	}()

	go func() {

		for i:=0 ;i 100; i++{
			//aa[i] = i+1
			//fmt.Println("a")
			bb.Store(i, i+1)
		}
		wg.Done()
	}()
	wg.Wait()
	bb.Range(func(k, v interface{}) bool {
		fmt.Println("iterate:", k, v)
		return true
	}
}

總結

  • 讀寫鎖和互斥鎖 讀寫鎖: 可以獲取多個讀鎖,只有讀寫沖突(加了讀鎖的時候,其它線程不能寫) 互斥鎖:跟讀寫操作無關,加了鎖,鎖內的資源就線程獨享
  • 個人感覺使用起來不太方便,不如根據實際場景自己互斥鎖。比如map都是可讀的,只有寫的時候需要串行執行,則寫操作封裝互斥鎖即可
  • sync.Map因為內部的操作較多等原因,并不適合大量寫的場景(適合大量讀,少量寫)。
  • sync.Map的原理詳見:https://www.jb51.net/article/188788.htm

參考

https://www.kancloud.cn/liupengjie/go/718991

https://colobu.com/2017/07/11/dive-into-sync-Map/

到此這篇關于golang中使用sync.Map的文章就介紹到這了,更多相關golang中使用sync.Map內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 深度解密 Go 語言中的 sync.map
  • golang中sync.Map并發創建、讀取問題實戰記錄
  • Go 并發讀寫 sync.map 詳細

標簽:廣西 貴陽 德州 調研邀請 阿克蘇 太原 慶陽 西雙版納

巨人網絡通訊聲明:本文標題《golang中使用sync.Map的方法》,本文關鍵詞  golang,中,使用,sync.Map,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang中使用sync.Map的方法》相關的同類信息!
  • 本頁收集關于golang中使用sync.Map的方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 真是外女刚成年摘花| 欧美大黄大色一级毛片| 成人黄色免费观看| 扒开老师?狂揉?免费看| 肉超多的女攻男受| 中文字幕一区二区在线视频| 美女露大胸超大胸| 日本免费黄网| 91中文在线| 扒开神里绫华白嫩的屁股漫画 | 国产精品久久久久久久无码电影| 男人的鸡鸡捅女人的鸡鸡| 高清午夜看片a福利在线观看琪琪| chinese国产hdsex18一| 够了够了已经c了高c了| 黄色高清视频| 国产AV人人夜夜澡人人爽麻豆| 激情婬妇A视频色欲Av| 一极黄色片| 九九99久久精品| 国产真人无遮挡作爱免费视频| 国产日韩欧美在线观看播放| 女医生销售的秘密3HD中字| 未发育宫交h文| 有力缓慢而坚定的进入happy| 久久精品人人做人人试看| 女行长撅起大白屁股| 免费看成人羞羞视频AV美女直播| 你好紧好湿好想cao你视频| 66j8免费视频| 张柏芝freesexvideos| √天堂资源在线AV在线观看| 和搜子居同的日子未删除| 国产精品久久久久久久久久九秃| 人妻制服视频一区二区宣宣影视| 久久疯狂做爰流白浆XX| 女人秘?免费看网站| 羞羞人成av午夜男女爽爽 | 91嫩草国产线免费观看| 亚瑟在线精品视频| 国产精品无码午夜福利免费看|