我正在用Go语言编写一个程序,我有一个简单的问题:
我的程序和通道中有一些goroutine,goroutines用它来进行通信.我不时想查看频道内的内容.如何在不中断goroutines工作的情况下实现这一目标?频道是否有任何打印内容的功能?或者我应该以某种方式复制它们?
var shelf chan int = make(chan int, 5)
go Depot(shelf)
go Shop(shelf)
var input string
fmt.Scanln(&input)
if (input == "print") {
//here print what on shelf
}
Run Code Online (Sandbox Code Playgroud)
如何在不中断goroutines工作的情况下实现这一目标?
简单的答案是你不能不打扰.通道是同步原语,这意味着它们使并发程序能够安全地进行通信.如果你从某个频道中取出某些内容,那么"取出"会以原子方式发生,没有其他人可以从同一频道中取出相同的内容.这是有意的.
您可以做的是将物品取出并在打印后放回原处.这种方法的问题在于,某些元素可能永远不会被打印而其他元素可能被打印不止一次,因为所有涉及的goroutine都会竞争从频道中抓取项目.
听起来你需要别的东西而不是频道.
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |