91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang并發編程之channel

發布時間:2020-07-10 13:24:32 來源:網絡 閱讀:969 作者:PowerMichael 欄目:編程語言
一、概念

channel是golang語言級別提供的協程(goroutine)之間的通信方式。
goroutine運行在相同的地址空間,因此訪問共享內存必須做好同步。那么goroutine之間如何進行數據的通信呢,Go提供了一個很好的通信機制channel。channel可以與Unix shell 中的雙向管道做類比:可以通過它發送或者接收值。這些值只能是特定的類型:channel類型。定義一個channel時,也需要聲明發送到channel的值的類型。

二、聲明方式
    var chanName chan ElementType
    var ch chan int
    使用make,可以指定channel容量
    ch = make(chan int)
三、channel得讀和寫

channel通過操作符<-來接收和發送數據
默認情況下,channel接收和發送數據都是阻塞的,除非另一端已經準備好,這樣就使得Goroutines同步變的更加的簡單,而不需要顯式的lock。所謂阻塞,也就是如果讀取(value := <-ch)它將會被阻塞,直到有數據接收。其次,任何發送(ch<-5)將會被阻塞,直到數據被讀出。無緩沖channel是在多個goroutine之間同步很棒的工具。

ch <- v    // 發送v的值到channel ch-> 寫數據
v := <- ch // 從ch中接收數據,并賦值給v ->讀數據
四、代碼實現
package main

import (
    "fmt"
    "strconv"
)

//定義一個加法函數,傳入channel類型,每計算一次,quit加1
func Add(x, y int, quit chan int)  {
    z := x + y
    fmt.Println(z)

    //寫數據
    quit <- 1

}

//接受數據,并賦值給我
func Read(ch chan int)  {
    value := <- ch

    fmt.Println("value" + strconv.Itoa(value))

}

func Write(ch chan int)  {
    //ch <- 10

}

func main()  {

    //定義一個channel類型切片數組
    chs := make([]chan int, 10)

    //循環執行加法函數
    for i := 0; i < 10; i++ {
        //拿取一個channel
        chs[i] = make(chan int)
        //執行goroutine和發送一個channel類型數據
        go Add(i, i, chs[i])
    }

    for _, v := range chs {
        //接口channel類型數據
        <- v
    }
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江口县| 滁州市| 樟树市| 合川市| 沅江市| 巫溪县| 漠河县| 长乐市| 泾川县| 长泰县| 教育| 贵阳市| 潞城市| 巴南区| 香港| 胶南市| 赤水市| 滦南县| 正镶白旗| 大余县| 原阳县| 乐陵市| 沐川县| 嘉义县| 额济纳旗| 无锡市| 翼城县| 故城县| 沧州市| 通渭县| 博罗县| 平和县| 克山县| 竹北市| 拉孜县| 寿宁县| 丰镇市| 恩平市| 阿克| 南丰县| 文昌市|