【Go语言】如何实现并发任务中某个任务只运行一次

【Go语言】如何实现并发任务中某个任务只运行一次

首页动作格斗代号只侠更新时间:2024-08-02

Go语言提供了一个sync包中的Once类型,它可以用来保证某个函数只被执行一次。Once类型包含一个Do方法,该方法接受一个函数作为参数,它保证该函数只会被执行一次,并且多个goroutine并发调用Do方法时,只有一个goroutine能够成功执行该函数。

以下是一个示例代码:

package main import ( "fmt" "sync" ) func setup() { fmt.Println("Setting up...") } func main() { var once sync.Once for i := 0; i < 5; i { go func() { once.Do(setup) fmt.Println("Running...") }() } fmt.Scanln() }

在上面的代码中,我们创建了一个sync.Once类型的变量once,然后在一个for循环中启动了5个goroutine,它们会同时调用Do方法并传递setup函数作为参数。由于我们在setup函数中输出了"Setting up...",因此只有一个goroutine能够成功执行该函数。在这个例子中,我们还在每个goroutine中输出了"Running...",以证明setup函数只被执行了一次。

输出结果如下:

Setting up... Running... Running... Running... Running... Running...

另外:fmt.Scanln() 是一个函数,它可以从标准输入读取一行文本并将其存储在指定的变量中。它会一直等待,直到用户输入一行文本并按下回车键。

总结

以上是Go语言实现只运行一次的方法,其中利用了sync包中的Once类型来保证某个函数只被执行一次。Once类型可以在多个goroutine之间共享,它的实现使用了互斥锁和原子操作,可以保证并发安全性。在实际开发中,我们应该注意避免使用全局变量或单例模式,以便更好地利用Go语言的并发机制和特性。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved