亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

有一個緩存位置的通道,在被接收數據之前也是阻塞的嗎?

package main


import (

? ? "fmt"

)

func main() {

? ? ch := make(chan int 1)

? ? ? ?go func() {

? ? ? ? fmt.Println("1")

? ? ? ? ch <- 1

? ? }()

? ? <-ch

? ? go func() {

? ? ? ?fmt.Println("2")

? ? ? ? ch <- 1

? ? }()

? ? <-ch

? ? go func() {

? ? ? ? fmt.Println("3")

? ? ? ? ch <- 1

? ? }()

? ? <-ch

}

把上面的1個緩存通道去掉,改成非緩存通道,程序還是可以執行的。請問有一個緩存位置的通道,在被接收數據之前也是和非緩存通道一樣,是阻塞的嗎?

正在回答

1 回答

這里的‘在被接受數據之前’指的是ch<-1存數據吧。

緩沖的channel:保證往緩沖中存數據先于對應的取數據,簡單說就是在取的時候里面肯定有數據,否則就因取不到而阻塞。所以緩沖的channel可能在取數據的時候發生阻塞。

非緩沖的channel:保證取數據先于存數據,就是保證存的時候肯定有其他的goroutine在取,否則就因放不進去而阻塞。所以非緩沖的channel可能在存數據的時候會發生阻塞。


2 回復 有任何疑惑可以回復我~
#1

qq_慕圣411555 提問者

謝謝謝謝
2019-04-20 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

有一個緩存位置的通道,在被接收數據之前也是阻塞的嗎?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號