Golang 可见性或 CPU 线程缓存问题

Golang visibility or CPU thread cache issue

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()
}

在这种情况下,我建议使用 context.WithCancel 来停止 goroutine。