2014-08-28 52 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