Go的sync.Once(三)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/fujian9544/article/details/100538220

Once

once.do(函数名)  函数只执行一次!执行一次后,其他协程不执行了

// 用once可以保证上面的oncebody被执行一次
package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var once sync.Once
	onceBody := func() {
		fmt.Println("Only once")
	}
	done := make(chan bool)
	for i := 0; i < 5; i++ {
		j := i
		go func(int) {
			once.Do(onceBody)
			fmt.Println(j)
			done <- true
		}(j)
	}
	<-done
	// 表示等待所有的进行执行完成
	time.Sleep(2 * time.Second)
}

// Only once
// 0
// 4
// 1
// 2
// 3

 

猜你喜欢

转载自blog.csdn.net/fujian9544/article/details/100538220