中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

白沙| 金湖县| 屏山县| 恩平市| 神池县| 夏津县| 周宁县| 六安市| 西安市| 黄冈市| 江阴市| 永和县| 日喀则市| 菏泽市| 安康市| 北海市| 阜南县| 丰原市| 盘锦市| 昭平县| 青河县| 西城区| 邹平县| 邹城市| 津南区| 普兰店市| 淄博市| 于田县| 盈江县| 建水县| 南木林县| 安塞县| 琼海市| 耒阳市| 交口县| 兰坪| 茌平县| 南宫市| 喀什市| 潮安县| 鲜城|