go協程中的安全map使用

2021-10-21 00:03:01 字數 718 閱讀 2703

為什麼要用安全map?是go協程中才會使用,map 是一種無序的鍵值對的集合。map 最重要的一點是通過 key 來快速檢索資料,key 類似於索引,指向資料的值。問題來了,這麼安逸的 資料結構,它不是協程安全的 !當多個 協程同時對乙個map 進行 讀寫時,會丟擲致命錯誤。

go 語言中有乙個其他的工具 sync.waitgroup 計數器。waitgroup物件內部有個計數器, 最初從0 開始, 他有3個方法 add() , done(), wait()用來控制計數器的數量。 add(n) 把計數器設定成n, done() 每次把計數器-1, wait() 會阻塞**的執行, 直到計數器的值減為0

這個主要就是為了等所有協程結束了 再往下走。

//計數器

var w sync.waitgroup

//安全map

var safemap sync.map

func xiecheng(c *gin.context)

w.wait() //所有協程執行完了,資料都寫入了

//安全map取值方法

safemap.range(func(k, v inte***ce{}) bool )

}func getadd(i int)

結果是

python協程使用 協程的案例

概念 使用者層面在乙個執行緒中進行多工切換的機制,比執行緒更加輕量級 實現併發量更大 協程的使用 使用第三方庫 gevent gevent 是乙個基於協程的 python 網路庫,在遇到 io 阻塞時,程式會自動進行切換,可以讓我們用同步的放肆寫非同步 io 協程的使用 from gevent im...

Unity中協程方法使用

開啟協程 void start 返回值是ienumerator 返回引數時使用 yield return null 協程方法的呼叫是startcoroutine changecolor ienumerator changecolor 關閉協程 關閉協程的方法需要和開啟協程的方法對應 不能使用star...

聊一聊go的協程

最近在學習go語言,學習到了協程,來記錄下學習的心路歷程 先來看下例子 列印5個hello和5個world package main func say s string func main go 啟動協程的方式就是使用關鍵字 go,後面一般接乙個函式或者匿名函式 執行上述 發現什麼也沒有輸出 為什麼...