分享
GO 使用channel进行同步 (缓冲channel)
genispan · · 3105 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
上一篇文章提到了普通的channel用来进行线程的同步。Go语言里面还有一种缓冲式的channel。
ch := make(chan int, 100)
需要执行类型和缓冲区的大小。
package main
import "fmt"
func main() {
c := make(chan int, 2) //建立int类型大小为2的缓冲区
c <- 1 //缓冲区1赋值为1
c <- 2 //缓冲区2赋值为2
fmt.Println(<-c) //输出缓冲区1
fmt.Println(<-c) //输出缓冲区2
}
可以循环 for i := range c 来不断从 channel 接收值,直到它被关闭。package main
import (
"fmt"
)
func fibonacci(n int, c chan int) {
x, y := 1, 1
for i := 0; i < n; i++ {
c <- x
x, y = y, x+y
}
close(c)
}
func main() {
c := make(chan int, 10)
go fibonacci(cap(c)+2, c)
for i := range c {
fmt.Println(i)
}
}有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信3105 次点击
上一篇:go的goroutine问题
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
上一篇文章提到了普通的channel用来进行线程的同步。Go语言里面还有一种缓冲式的channel。
ch := make(chan int, 100)
需要执行类型和缓冲区的大小。
package main
import "fmt"
func main() {
c := make(chan int, 2) //建立int类型大小为2的缓冲区
c <- 1 //缓冲区1赋值为1
c <- 2 //缓冲区2赋值为2
fmt.Println(<-c) //输出缓冲区1
fmt.Println(<-c) //输出缓冲区2
}
可以循环 for i := range c 来不断从 channel 接收值,直到它被关闭。package main
import (
"fmt"
)
func fibonacci(n int, c chan int) {
x, y := 1, 1
for i := 0; i < n; i++ {
c <- x
x, y = y, x+y
}
close(c)
}
func main() {
c := make(chan int, 10)
go fibonacci(cap(c)+2, c)
for i := range c {
fmt.Println(i)
}
}