golang中的sync.once
生活随笔
收集整理的這篇文章主要介紹了
golang中的sync.once
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
sync.Once.Do(f func())是一個(gè)挺有趣的東西,能保證once只執(zhí)行一次,無論你是否更換once.Do(xx)這里的方法,這個(gè)sync.Once塊只會(huì)執(zhí)行一次
與sync.WaitGroup類型一樣,sync.Once類型也屬于結(jié)構(gòu)體類型,同樣也是開箱即用和并發(fā)安全的。由于這
個(gè)類型中包含了一個(gè)sync.Mutex類型的字段,所以,復(fù)制該類型的值也會(huì)導(dǎo)致功能的失效。
Once類型的Do方法只接受一個(gè)參數(shù),這個(gè)參數(shù)的類型必須是func(),即:無參數(shù)聲明和結(jié)果聲明的函數(shù)。
package mainimport ("fmt""sync""time" )func onces() {fmt.Println("onces") }func onced() {fmt.Println("onced") }var once sync.Oncefunc main() {for i, v := range make([]string, 10) {once.Do(onces)fmt.Println("count: ", v, "---", i)}for i := 0; i < 10; i++ {go func() {once.Do(onced)fmt.Println("213")}()}time.Sleep(4000) }輸出
onces count: --- 0 count: --- 1 count: --- 2 count: --- 3 count: --- 4 count: --- 5 count: --- 6 count: --- 7 count: --- 8 count: --- 9 213光會(huì)用是不夠的,再來看下sync.once的實(shí)現(xiàn)原理
源碼:
總結(jié)
以上是生活随笔為你收集整理的golang中的sync.once的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang对象池
- 下一篇: golang中的socket