Golang 中的通道同步
如果我们想同步goroutines,我们可以使用通道。通过同步,我们希望让goroutine以定义的方式工作,例如,在前一个goroutine执行完成之前不启动下一个goroutine。
该渠道实现的是,因为它们可以被用来阻止过程,然后帮助,也可用于通知第二够程,以前的够程已经完成了它的任务。
示例1
让我们考虑一个非常基本的通道同步示例,我们将看到如何在缓冲通道的帮助下实现它。
考虑下面显示的代码。
package main
import (
"fmt"
"time"
)
func check(done chan bool) {
fmt.Print("欢迎来到...")
time.Sleep(time.Second)
fmt.Println("nhooo")
done <- true
}
func main() {
done := make(chan bool, 1)
go check(done)
<-done
}在上面的代码中,我们同步了代码,因为<-done只是阻塞了代码,除非并且直到它接收到我们在check函数中执行的值,否则它不会让其他任何东西执行。
如果我们在上面的代码上使用gorunmain.go命令,我们将看到以下输出。
输出结果
欢迎来到...nhooo
示例2
上面的例子可以用来进一步增强同步,因为我们可以让一个goroutine等待另一个goroutine。
考虑下面显示的代码。
package main
import (
"fmt"
"time"
)
func check(done chan bool) {
fmt.Print("欢迎来到...")
time.Sleep(time.Second)
fmt.Println("nhooo")
done <- true
}
func check2() {
fmt.Println("从这里学习Go!")
}
func main() {
done := make(chan bool, 1)
go check(done)
if <-done {
go check2()
time.Sleep(time.Second)
}
}输出结果如果我们在上面的代码上使用gorunmain.go命令,我们将看到以下输出。
欢迎来到...nhooo 从这里学习Go!
热门推荐
10 海南考试祝福语结婚简短
11 巧克力情侣祝福语大全简短
12 蛋糕班级新年祝福语简短
13 求婚蛋糕卡片祝福语简短
14 未来求婚祝福语简短英文
15 对好友的祝福语简短
16 美好的毕业祝福语简短
17 卡片朋友祝福语大全简短
18 雷州人结婚祝福语简短