在我正在编写的一个简单的计时器调度程序中,我正在使用监视器 goroutine 来同步开始/停止和计时器完成事件。
监控 goroutine,当精简到基本的时候,看起来像这样:
actions := make(chan func(), 1024)
// monitor goroutine
go func() {
for a := range actions {
a()
}
}()
actions <- func() {
actions <- func() {
// causes deadlock when buffer size is reached
}
}
这很有效,直到发送一个动作来发送另一个动作。计划的操作可能会计划另一个操作,这会在达到缓冲区大小时导致死锁。
有没有什么干净的方法来解决这个问题而不诉诸共享状态(我在我的特定问题中尝试过,但很丑陋)?
茅侃侃
相关分类