Golang标准库中的sync.Once是一个线程安全的用于执行一次性操作的对象。对于同一个sync.Once对象,在第一次执行其Do方法时将调用该方法的参数函数,而完成后再次调用Do方法也不会再执行该参数函数。
例如下列实例中,将在循环中新建一个goroutine并调用once.Do方法,并将会打印Only once文本的onceBody方法作为参数传递至once.Do方法中。随后通过channel确保所有goroutine都执行完成:
package main
import (
"fmt"
"sync"
)
func main() {
var once sync.Once
onceBody := func() {
fmt.Println("Only once")
}
done := make(chan bool)
for i := 0; i < 10; i++ {
go func() {
once.Do

本文介绍了Go语言标准库中的sync.Once,它用于保证一次性操作的安全执行。通过分析sync.Once的源码,展示了如何在并发环境中实现线程安全的单例模式。文章详细解释了Once结构体的属性和Do方法的工作原理,以及对比了使用Once与传统互斥锁在性能上的优势。
最低0.47元/天 解锁文章
1071

被折叠的 条评论
为什么被折叠?



