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

标签 go concurrency volatile

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在这种情况下停止 goroutines。

关于Golang 可见性或 CPU 线程缓存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56290928/

相关文章:

go - 如何在 Go 中处理来自 Druid 查询的大型 http 响应体

godoc http 服务器似乎没有实时重新加载更改

Python 同时填充列表

java - Java 是否存在像 CHESS 这样的东西?

java - 线程内一致性

pointers - 通过将指针传递给 Go 中的函数来获取不同的值

在 go 模式 emacs session 中找不到 Godef

java - Java 中的重入是如何实现的?

java - volatile HashMap 不在 Thead 之外更新

java - synchronized 和 volatile 在 Java 内存模型中如何工作?