[英]Reading Go channels in chunks
我是 Go 的新手,我正在嘗試編寫一個具有兩種類型的 goroutine 的程序,一些會寫入通道,一些會從該通道讀取。
我想設置它,以便從通道讀取的 goroutines 將以兩個塊為單位讀取,而 writer goroutines 將一個接一個地寫入。 像這樣:
n := 20
ch := make(chan struct{}, 2)
// writer goroutines
for i := 0; i < n*2; i++ {
go func() {
ch <- struct{}{}
}()
}
// reader goroutines
for i := 0; i < n; i++ {
go func() {
<- ch
<- ch
}()
}
我希望我的 writer goroutines 不斷向我的頻道添加元素,直到它已滿,之后我希望我的一個 reader goroutines 處理頻道中的兩個元素並一次清除所有元素。 基本上,reader goroutines 必須等待通道滿了才能清除它。
不用說,我上面的實現會有競爭條件,並且不是 go 的最佳方式。 我該如何解決這個問題? 我不確定如何讓我的閱讀器 goroutines 一次讀取多個內容並同時避免競爭問題。 我願意使用 Go 的其他功能而不是頻道。
len(ch)
- 將返回通道緩沖區中排隊(未讀)的元素數。 您可以使用這個 function 來確保頻道在消費前已滿。
另一方面,你必須讓你的主例程等到 reader 和 writer goroutines 都完成。 你可以使用sync.WaitGroup
來做到這一點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.