加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang的原子操作sync.once

发布时间:2020-12-16 18:20:48 所属栏目:大数据 来源:网络整理
导读:复习复习golang的库函数 type Once struct {m Mutexdone uint32 //相当于一个flag值}func (o *Once) Do(f func()) { //atomic库是原子操作,由汇编代码实现if atomic.LoadUint32(o.done) == 1 {return}// Slow-path. //读取o.done值前设置一个锁mutexo.m.Loc

复习复习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的数值,来实现的事务操作

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读