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)
            }
    }
  • 相关阅读:
    linux下tomcat启动正常,但是外部浏览器无法访问
    mybatis中映射文件和实体类的关联性
    判断用户请求时使用的浏览器类型
    HTML地理位置定位
    使用jQuery的toggle()方法对HTML标签进行显示、隐藏操作
    jQuery怎么去掉标签的hover效果
    java与javascript
    sendRedirect 与forward的区别
    windows--添加程序到右键菜单中
    收集:word xml格式
  • 原文地址:https://www.cnblogs.com/justart/p/11662808.html
Copyright © 2011-2022 走看看