我有一个click
通知发件人关闭频道,还有一个stopChan
来确保只有一个发件人可以关闭频道,但是我仍然收到“在关闭的频道上发送”的恐慌,为什么?
sync.Once
答案 0 :(得分:0)
go
并发功能非常强大。协调并发是非常 困难。幸运的是,go
标准库提供了许多工具来帮助实现这一目标。您可能应该熟悉context
软件包。
context.Context
在幕后使用完工通道(类似于stopChan
),但具有取消链接之类的其他机制。在整个go
标准库中,它们也用于HTTP,数据库和其他阻止类型的请求。
正如@JimB所提到的,在协调生产者/消费者时,通常很少需要sync.Once
。通常chan
和sync.WaitGroup
就足够了。
无论如何,这是使用context.Context
对代码的协调修复: