问题是Go的调度程序的实现方式。当前goroutine仅在进行系统调用或阻塞通道 *** 作时才能屈服于其他goroutine。
fmt.Println进行系统调用,使goroutine有机会屈服。否则它没有一个。
在实践中,这通常并不重要,但是对于这样的小问题,有时可能会出现。
另外,在通道上进行非阻塞发送的一种更惯用,更省事的方法是:
func customer(id int, shop chan<- int) { // Enter shop if seats available, otherwise leave select { case shop <- id: default: }}
您这样做的方式是,客户可能最终在理发店外面等了,因为到您实际进行发送时,
len(shop)可能已经改变了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)