zoukankan      html  css  js  c++  java
  • GO 并发

    package main

    import "fmt"

    import "time"

    func sum(s []int, c chan int,order int) {
    sum := 0
    for _, v := range s {
    sum += v
    }
            c <- sum // 把 sum 发送到通道 c
            fmt.Printf("block %d ",order);
    }

    func main() {
    s := []int{7, 2, 8, -9, 4, 0}
    //c := make(chan int)//--不带缓冲,写入方阻塞,直到接受方接受了数据
    c := make(chan int,10)//这里带缓冲,写入方不会阻塞,直到缓冲区满
    go sum(s[:len(s)/2], c,1)
    go sum(s[len(s)/2:], c,2)
    x, y := <-c, <-c // 从通道 c 中接收---接受阻塞,直到有数据

            fmt.Println(x, y, x+y)
            time.Sleep(2*time.Second);
            close(c)
    }
     
    package main

    import (
            "fmt"
    )
    ====range遍历信道,结束循环需要关闭信道
    func fibonacci(n int, c chan int) {
            x, y := 0, 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), c)
            // range 函数遍历每个从通道接收到的数据,因为 c 在发送完 10 个
            // 数据之后就关闭了通道,所以这里我们 range 函数在接收到 10 个数据
            // 之后就结束了。如果上面的 c 通道不关闭,那么 range 函数就不
            // 会结束,从而在接收第 11 个数据的时候就阻塞了。
            for i := range c {
                    fmt.Println(i)
            }
    }
  • 相关阅读:
    语音识别算法阅读之CTC
    语音识别模型阅读之CLDNN
    声纹识别算法阅读之self-attentive x-vector
    Git链接两个远程仓库
    tortoisegit提交不到远程库问题解决记录
    安装 Git 命令之后,本地的工作区中的文件没有小图标解决办法
    .NET CLS(Common Language System)简介
    .NET CTS(Common Type System)简介
    C# 中间语言
    .NET 程序执行流程
  • 原文地址:https://www.cnblogs.com/justart/p/11662808.html
Copyright © 2011-2022 走看看