欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang中使用sync.Map的方法

 更新時間:2020年06月16日 22:39:11   作者:IT技術(shù)小小鳥  
這篇文章主要介紹了golang中使用sync.Map的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

背景

go中map數(shù)據(jù)結(jié)構(gòu)不是線程安全的,即多個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的結(jié)果表示是否在map中找到值

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

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

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

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

實踐

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
	}
}

總結(jié)

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

參考

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

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

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

相關(guān)文章

  • GO將mysql?中?decimal?數(shù)據(jù)類型映射到?protobuf的操作方法

    GO將mysql?中?decimal?數(shù)據(jù)類型映射到?protobuf的操作方法

    這篇文章主要介紹了go如何優(yōu)雅地將?mysql?中?decimal?數(shù)據(jù)類型映射到?protobuf,本文主要展示一下在 protobuf中 float與double的一個區(qū)別,結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Go語言實現(xiàn)類似c++中的多態(tài)功能實例

    Go語言實現(xiàn)類似c++中的多態(tài)功能實例

    Go本身不具有多態(tài)的特性,不能夠像Java、C++那樣編寫多態(tài)類、多態(tài)方法。但是,使用Go可以編寫具有多態(tài)功能的類綁定的方法。下面來一起看看吧
    2016-09-09
  • 代碼之美:探索Go語言斷行規(guī)則的奧秘

    代碼之美:探索Go語言斷行規(guī)則的奧秘

    Go語言是一門以簡潔、清晰和高效著稱的編程語言,而斷行規(guī)則是其代碼風格的重要組成部分,通過深入研究Go語言的斷行規(guī)則,我們可以更好地理解和編寫優(yōu)雅的代碼,本文將從語法規(guī)范、代碼風格和最佳實踐等方面進行探討,幫助讀者更好地理解和應用Go語言的斷行規(guī)則
    2023-10-10
  • Go通過不變性優(yōu)化程序詳解

    Go通過不變性優(yōu)化程序詳解

    這篇文章主要為大家介紹了Go通過不變性優(yōu)化程序?qū)嵗斀?,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Golang實現(xiàn)斷點續(xù)傳功能

    Golang實現(xiàn)斷點續(xù)傳功能

    這篇文章主要為大家詳細介紹了Golang實現(xiàn)斷點續(xù)傳、復制文件功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • golang內(nèi)置函數(shù)len的小技巧

    golang內(nèi)置函數(shù)len的小技巧

    len是很常用的內(nèi)置函數(shù),可以測量字符串、slice、array、channel以及map的長度/元素個數(shù)。本文就來介紹一下其他小技巧,感興趣的可以了解一下
    2021-07-07
  • Go語言kafka生產(chǎn)消費消息實例搬磚

    Go語言kafka生產(chǎn)消費消息實例搬磚

    這篇文章主要為大家介紹了Go語言kafka生產(chǎn)消費消息的實例搬磚,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Go標準庫-ServeMux的使用與模式匹配深入探究

    Go標準庫-ServeMux的使用與模式匹配深入探究

    這篇文章主要為大家介紹了Go標準庫-ServeMux的使用與模式匹配深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • GO語言延遲函數(shù)defer用法分析

    GO語言延遲函數(shù)defer用法分析

    這篇文章主要介紹了GO語言延遲函數(shù)defer用法,較為詳細的分析了GO語言的特性與具體用法,并給出了一個比較典型的應用實例,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • Golang中常用的語法糖分享

    Golang中常用的語法糖分享

    語法糖,也稱糖語法,是由英國計算機科學家彼得·蘭丁提出的,用于表示編程語言中的某種類型的語法,這些語法不會影響功能,但使用起來卻很方便,本文就來看看Golang中常用的語法糖有哪些吧
    2023-05-05

最新評論