golang的原子操作sync.once

前端之家收集整理的这篇文章主要介绍了golang的原子操作sync.once前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

复习复习golang的库函数

type Once struct {
	m    Mutex
	done uint32 //相当于一个flag值
}


func (o *Once) Do(f func()) {
    //atomic库是原子操作,由汇编代码实现
	if atomic.LoadUint32(&o.done) == 1 {
		return
	}
	// Slow-path.
    //读取o.done值前设置一个锁mutex
	o.m.Lock()
	defer o.m.Unlock()
	if o.done == 0 {
		defer atomic.StoreUint32(&o.done,1)
		f()
	}
}

//主要是由原子操作atomic读取和存储o的done的数值,来实现的事务操作
原文链接:https://www.f2er.com/go/189008.html

猜你在找的Go相关文章