Golang 全局一次执行实现

Posted Jsen_Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang 全局一次执行实现相关的知识,希望对你有一定的参考价值。

sync.Once.Do 的实现:

type Once struct 
// 为了防止多个协程同时执行,加入锁
	m    Mutex
// 记录是否被执行过,最终会被atomic.StoreUnit32存起来
	done uint32


func (o *Once) Do(f func()) 
// 如果执行过就return
	if atomic.LoadUint32(&o.done) == 1 
		return
	
	// Slow-path. 加锁
	o.m.Lock()
	// 最后解锁
	defer o.m.Unlock()
	// 如果没有执行,就执行f(),在此代码块的最后存储执行过的标记
	if o.done == 0 
		defer atomic.StoreUint32(&o.done, 1)
		f()
	


以上是关于Golang 全局一次执行实现的主要内容,如果未能解决你的问题,请参考以下文章

(十六)golang--匿名函数

golang单例模式

Golang之不可重入函数实现

Golang M 2023 6 topic

golang的flag包源码解析与使用

Golang Once源码解析