Golang 可见性或 CPU 线程缓存问题
Posted
技术标签:
【中文标题】Golang 可见性或 CPU 线程缓存问题【英文标题】:Golang visibility or CPU thread cache issue 【发布时间】:2019-05-24 10:35:49 【问题描述】:1) golang 如何解决可见性问题?
2) 下面的代码有什么问题吗?
package main
type Service struct
stop bool
func (s *Service) Run()
for !s.stop
//Some logic
func (s *Service) Stop()
s.stop = true
func main()
s := &Service
go s.Run()
//Some logic
s.Stop()
【问题讨论】:
您的代码非常不完整。很难判断它是否还有其他问题。 1) 内存栅栏,使用互斥体 golang.org/pkg/sync/atomic 至于 2) 是的,使用通道、互斥体或原子 @Flimzy 感谢您的评论,添加了停止功能 @Maksym 是的。它有一个数据竞赛。此外,您的主 goroutine(执行 main)运行到结束并杀死进程中的另一个 goroutine。 "golang 如何解决可见性问题?" “可见性问题”是什么意思? 【参考方案1】:在这种情况下,我建议使用context.WithCancel 来停止 goroutine。
【讨论】:
以上是关于Golang 可见性或 CPU 线程缓存问题的主要内容,如果未能解决你的问题,请参考以下文章