美文网首页
sync.Once分析

sync.Once分析

作者: 剑雪封侯之 | 来源:发表于2017-11-22 23:23 被阅读0次

使用场合

在实际生产中,很多时候我们需要执行只有一次的操作(如单例模式)。在golang中,我们可以简单的使用sync.Once包来实现该操作。
使用方式如下:

package main

import "sync.Once"
var once sync.Once 
func process_init(){
//statement
...
}

func process(){
once.Do(process_init)
...
}

func main(){
 for {
  process()
  }
}

sync.Once源码说明

import (
    "sync/atomic"
)

type Once struct {
    //互斥锁
    m    Mutex
   //执行标记
    done uint32
}

func (o *Once) Do(f func()) {
        //原子操作判断o.done是否为1,若为1,表示f已经执行过,直接返回
    if atomic.LoadUint32(&o.done) == 1 {
        return
    }
    //加锁,保证互斥访问
    o.m.Lock()
    defer o.m.Unlock()
        //基o.done为0,表示f未执行,对o.done原子赋值,并且执行f函数
    if o.done == 0 {
        defer atomic.StoreUint32(&o.done, 1)
        f()
    }
}

相关文章

  • 深度剖析Golang sync.Once源码

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

  • Go语言——sync.Once分析

    Go语言——sync.Once分析 sync.Once表示只执行一次函数。要做到这点,就需要两点: 计数器,统计函...

  • sync.Once分析

    使用场合 在实际生产中,很多时候我们需要执行只有一次的操作(如单例模式)。在golang中,我们可以简单的使用sy...

  • sync.Once

    利用 sync.once 实现单例 sync.Once 实现 为什么要用defer 来加计数?不直接在后面执行计数...

  • golang sync.Once源代码阅读--让你的初始化只执行

    sync.Once的用处 sync.Once 主要用途执行只需要执行一次的初始化函数,比如验证器的初始,http....

  • sync.Once

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

  • go 中的 sync.Once

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

  • 深入源码分析golang之sync.Once

    什么是sync.Once 官方文档对它的描述是:一个对象将完全执行一次,不得复制。常常用来单例对象的初始化场景,或...

  • sync.Once

    once结构是这样的 其中只有这么一个方法 作用是保证多个协程只执行某个函数一次为什么不能使用CAS原子操作来替代...

  • golang 系列:sync.Once 讲解

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

网友评论

      本文标题:sync.Once分析

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