Go語言併發程式設計 緩衝和單向通道

2021-10-04 12:54:14 字數 1090 閱讀 1250

緩衝通道就是指乙個通道帶有乙個緩衝區,傳送資料到乙個緩衝通道只有在緩衝區滿時才被阻塞,從緩衝通道獲取資料只有在緩衝區為空時才會被阻塞。

通道可以存放的資料個數為1+緩衝區容量

**實現:

package main

import

("fmt"

"strconv"

)func

main()

fmt.

println

("main..over..")}

func

senddata

(ch chan

string

)close

(ch)

}

控制台輸出(結果不唯一):

子goroutine中寫入第 0 個資料

子goroutine中寫入第 1 個資料

讀取的資料: 資料0

讀取的資料: 資料1

讀取的資料: 資料2 //注意理解此處的誤差

子goroutine中寫入第 2 個資料

子goroutine中寫入第 3 個資料

子goroutine中寫入第 4 個資料

子goroutine中寫入第 5 個資料

子goroutine中寫入第 6 個資料

子goroutine中寫入第 7 個資料

讀取的資料: 資料3

讀取的資料: 資料4

讀取的資料: 資料5

讀取的資料: 資料6

讀取的資料: 資料7

子goroutine中寫入第 8 個資料

子goroutine中寫入第 9 個資料

讀取的資料: 資料8

讀取的資料: 資料9

main..over..

前面學習的通道都是雙向的,即既可以從乙個方向都,也可以從同乙個方向寫,而單向通道,即是只能讀,或者寫的通道

單向通道有什麼用呢?

我們往往只會建立普通的通道,

而單向通道往往用來作為函式的形參保證函式對其唯讀或者只寫

Go語言程式設計基礎 併發 一 Go程 通道

go程 goroutine 是由go執行時管理的輕量級執行緒。啟動乙個go程並執行f x,y,z gof x,y,z package main import fmt time func fff s string func main 通道是帶有型別的管道,可以使用通道操作符 來傳送或接收值。將v傳送至...

go語言通道插入0 Go語言帶緩衝的通道

go語言中有緩衝的通道 bufferedchannel 是一種在被接收前能儲存乙個或者多個值的通道。這種型別的通道並不強制要求goroutine之間必須同時完成傳送和接收。通道會阻塞傳送和接收動作的條件也會不同。只有在通道中沒有要接收的值時,接收動作才會阻塞。只有在通道沒有可用緩衝區容納被傳送的值時...

Go併發程式設計 通道的happen before語義

一 前言 在go中通道是用來解決多個goroutines之間進行同步的主要措施,在多個goroutines中,每個對通道進行寫操作的goroutine都對應著乙個從通道讀操作的goroutine。package main import fmt var c make chan int,10 var a...