2014-08-28 76 views
2
package main 
import "fmt" 
import "time" 

func main() { 
    c := make(chan int) 
    c <- 42 // write to a channel 

    val := <-c // read from a channel 
    println(val) 
} 

我覺得c <- 42把42通道C,然後在C VAL val := <-c認沽值。 但爲什麼會發生死鎖?走通道,看上去不錯,但它得到死鎖

回答

5

您已經創建了一個無緩衝的頻道。因此,語句c <- 42將會阻塞,直到其他一些goroutine試圖從通道接收值。由於沒有其他的goroutine在做這件事,所以你陷入了僵局。有兩種方法可以解決此問題:

  1. 在不同的goroutine中執行接收。
  2. 向通道添加緩衝區。例如,c := make(chan int, 1)將允許您在通道上發送單個值而不受阻塞。
+0

明確。謝謝,詹姆斯 – BufBills 2014-08-28 02:24:24