【发布时间】:2017-11-09 11:05:12
【问题描述】:
我有几个函数希望它们以原子方式执行,因为它们处理敏感数据结构。假设以下场景:
有两个函数:lock(sth) 和 unlock(sth),goroutine 可以随时调用它们来锁定或解锁全局数组中的 sth。我正在考虑有一个命令通道,以便 goroutine 将 lock 和 unlock 命令发送到通道中,并且在通道的接收端,某种 handler 处理 lock,unlock 请求,顺序,通过从频道抓取命令。这很好,但是如果handler 想要将结果发送回请求者呢?是否可以使用 golang 频道这样做?我知道可以使用某种锁机制,例如互斥锁,但我想知道是否可以将通道用于此类用例?我在某处看到建议使用通道而不是 goland 低级锁结构。
一句话:
在容量为 1 的通道中,我希望接收方能够回复发送消息的 goroutine。
或等效:
一个 goroutine 发送一些东西到一个通道;消息被另一个 goroutine 接收并处理导致一些结果;发件人如何知道结果?
【问题讨论】:
标签: multithreading go concurrency locking