golang sync once

golang sync包下的Once是多线程开始之前先执行,并且仅执行一次的方法。可以考虑用来做一些初始化操作。

package main

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

var counter int = 0

func main() {
	var once sync.Once
	onceBody := func() {
		time.Sleep(3e9)
		fmt.Println("Only once")
	}
	done := make(chan bool)
	for i := 0; i < 10; i++ {
		j := i
		go func(int) {
			once.Do(onceBody)
			fmt.Println(j)
			done <- true
		}(j)
	}
	for i := 0; i < 10; i++ {
		<-done
	}
}

输出结果:

Only once
0
1
2
3
4
5
6
7
8
9

 

发表评论

电子邮件地址不会被公开。

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>