[Go] sync.Once 的用法

sync.Once.Do(f func()) 是一个非常有意思的东西,能保证 once 只执行一次,无论你是否更换 once.Do(xx) 这里的方法,这个 sync.Once块 只会执行一次。

package main

import (
	"fmt"
	"sync"
	"time"
)

var once sync.Once

func main() {

	for i, v := range make([]string, 10) {
		once.Do(onces)
		fmt.Println("count:", v, "---", i)
	}

	for i := 0; i < 10; i++ {

		go func() {
			once.Do(onced)
			fmt.Println("213")
		}()
	}

	time.Sleep(4000)
}

func onces() {
	fmt.Println("onces")
}

func onced() {
	fmt.Println("onced")
}

因此,常用于 单例模式 中!

时间: 2024-12-15 19:52:35

[Go] sync.Once 的用法的相关文章

原子操作--sync/atomic的用法

golang 通过sync/atomic库来支持cpu和操作系统级别的原子操作.但是对要操作类型有如下要求 int32, int64,uint32, uint64,uintptr,unsafe包中的Pointer.不过,针对unsafe.Pointer类型,该包并未提供进行原子加法操作的函数 sync/atomic 提供的原子操作有 加法(add), 比较并交换(compare and swap, 简称CAS),加载(load), 存储(store),交换(swap) 针对sync/atomic

Synchronize 四种用法

Sync 四种用法 https://www.cnblogs.com/lukelook/p/9946065.html Sync 静态和非静态用法 https://blog.csdn.net/wangwang00001/article/details/80100716 原文地址:https://www.cnblogs.com/Jomini/p/12688681.html

go sync.once用法

欢迎关注go语言微信公众号 每日go语言 golang_everyday sync.once可以控制函数只能被调用一次.不能多次重复调用.示例代码: package main import ( "fmt" "sync" "time" ) func main() { o := &sync.Once{} go do(o) go do(o) time.Sleep(time.Second * 2) } func do(o *sync.Once)

vue2.0修饰符sync用法

如果子组件是一个弹窗,我们想通过点击关闭按钮来关闭子组件弹窗,子组件弹窗的v-show由变量isVisible控制,这个变量通过props由父组件来注入, 而子组件无法改变props里面的变量的值,但可以通过sync修饰来实现,代码如下: 子组件: <button @click="close">关闭</button> export default { props: { isVisible: { type: Boolean, default: false } },

[转]cin.clear()、cin.sync()和cin.ignore()的用法

cin.clear()是用来更改cin的状态标识符的. cin.sync()是用来清除缓冲区的数据流的. 如果标识符没有改变那么即使清除了数据流也无法正常输入,反之亦然,因此两者要联合起来使用.下面是一个使用的例子: #include<iostream> using namespace std; int main() { int a; cout<<"输入一个字母:"<<endl; cin>>a; //int型变量中放了char型数据,fa

Golang sync.NewCond条件锁的用法

package main import ( "fmt" "sync" "time" ) func main() { c := sync.NewCond(&sync.Mutex{}) queue := make([]interface{}, 0, 10) removeFromQueue := func(delay time.Duration) { time.Sleep(delay) c.L.Lock() queue = queue[1:]

gawk用法

awk概述 AWK的名字来自于其创始人Aho, Weinberger, Kernihan三人的名字首字母的组合. awk是一个功能非常强大的文本处理工具,它能把文本当做数据库,然后把数据库中的每一行切分为多个字段,可以实现分别对多个字段或行进行处理,并使之按照一定的格式输出,所以awk是文本报告生成器,它能格式化文本.而要选择性地处理字段或行,则可以使用模式(PATTERN)来匹配. 此外,awk已经是一门独立完整的编程语言,它支持一般编程语言所具备的特性,如支持变量.数组等数据结构.支持条件判

AWK用法入门详解

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK

linux 命令cut用法

cut命令        cut [OPTION]... [FILE]...            -d DELIMITER: 指明分隔符            -f FILEDS:                #: 第#个字段                #,#[,#]离散的多个字段例如1,3,6                #-#连续的多个字段, 例如1-6 混合使用1-3,7            --output-delimiter=STRING             [[ema