• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

20.channel有缓冲和无缓冲同步问题

开发技术 开发技术 3个月前 (10-09) 27次浏览

1.有缓冲

示例代码

package chapter15

import (
    "fmt"
    "time"
)

func RunChannel02() {
    c := make(chan int, 3) // 带有缓冲的channel

    fmt.Println("len(c) = ", len(c), ", cap(c) = ", cap(c))

    go func() {
        defer fmt.Println("子go程结束")
        for i := 0; i < 4; i++ {
            c <- i
            fmt.Println("子go程正在运行,发送的元素=", i, "len(c) = ", len(c), ", cap(c) = ", cap(c))
        }
    }()

    time.Sleep(2 * time.Second)

    for i := 0; i < 4; i++ {
        num := <-c //从c中接收数据,并赋值给num
        fmt.Println("num = ", num)
    }

    fmt.Println("main 结束")
}
// 执行结果
len(c) =  0 , cap(c) =  3
子go程正在运行,发送的元素= 0 len(c) =  0 , cap(c) =  3
子go程正在运行,发送的元素= 1 len(c) =  1 , cap(c) =  3
子go程正在运行,发送的元素= 2 len(c) =  2 , cap(c) =  3
子go程正在运行,发送的元素= 3 len(c) =  3 , cap(c) =  3
子go程结束
num =  0
num =  1
num =  2
num =  3
main 结束

可能出现的执行结果现象
20.channel有缓冲和无缓冲同步问题

2.总结

20.channel有缓冲和无缓冲同步问题


程序员灯塔
转载请注明原文链接:20.channel有缓冲和无缓冲同步问题
喜欢 (0)