美文网首页golang技巧篇
golang sync.Once应用场景

golang sync.Once应用场景

作者: _yun | 来源:发表于2022-12-06 15:59 被阅读0次
    1. chan只关闭一次
type MyChan struct {
    c    chan int
    once sync.Once
}

func (m *MyChan) SafeClose() {
    m.once.Do(func() {
        close(m.c)
    })
}
    1. 懒加载
type Person struct{}
var per *Person
var once sync.Once

func GetInstance() *Person {
    once.Do(func() {
        per = new(Person)
    })
    return per
}

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            p := GetInstance()
            fmt.Printf("%p\n", p)
        }()
    }
    wg.Wait()
}

总结:

type Once struct {
    done uint32
    m    Mutex
}

sync.Once是一种单例模式, 并且保证 once.Do(f) 在返回时, f()一定已经被执行了, sync.Once源码中, 将高频访问的done字段放到第一位可减少cpu的offset计算, 提高效率

相关文章

  • golang sync.Once应用场景

    chan只关闭一次 懒加载 总结: sync.Once是一种单例模式, 并且保证 once.Do(f) 在返回时,...

  • golang sync.Once 应用

    sync.Once能确保实例化对象Do方法在多线程环境只运行一次,内部通过互斥锁实现 示例 输出 2018/03/...

  • sync.Once

    sync.Once 的使用场景 sync.Once 是 Go 标准库提供的使函数只执行一次的实现,常应用于单例模式...

  • go 中的 sync.Once

    sync.Once 是 Go 标准库提供的使函数只执行一次的实现,常应用于单例模式,sync.Once 仅提供了一...

  • golang sync.once解析

    实现原理(当前代码版本go version go1.11.4 ) 1.atomic 原子操作计数器,用于记录此On...

  • golang的sync.Once

    很早就知道sync.Once,一直以来都觉得这个功能用处不大,所以就没关注,在项目中也没使用过它。原因很简单,可以...

  • Golang sync.Once使用

    程序输出如下,

  • 深度剖析Golang sync.Once源码

    目录 什么是sync.Once 如何使用sync.Once 源码分析 什么是sync.Once Once 可以用来...

  • golang熟练运用sync.Once

    sync.Once的作用 控制需要执行的代码在执行时候有且只执行一次,经常用在单例模式下,保证对象只生成一次。注意...

  • golang 系列:sync.Once 讲解

    sync.Once 介绍 之前提到过 Go 的并发辅助对象:WaitGroup[https://mp.weixin...

网友评论

    本文标题:golang sync.Once应用场景

    本文链接:https://www.haomeiwen.com/subject/gxawfdtx.html