【发布时间】:2020-02-14 22:19:36
【问题描述】:
我有 2 个 goroutine,g 用于检测 f 应该停止的条件,f 在进行实际处理之前检查它是否应该在每次迭代中停止。在 Java 等其他语言中,我会使用线程安全的共享变量,如以下代码:
func g(stop *bool) {
for {
if check_condition() {
*stop = true
return
}
}
}
func f(stop *bool) {
for {
if *stop {
return
}
do_something()
}
}
func main() {
var stop = false
go g(&stop)
go f(&stop)
...
}
我知道上面的代码不安全,但是如果我使用通道将停止从g 发送到f,f 在从通道读取时会被阻止,这是我想要避免的。在 Go 中执行此操作的安全且惯用的方法是什么?
【问题讨论】:
标签: go