首页 > 后端开发 > Golang > 正文

从 Go 中的并发 goroutine 访问同一结构的不同成员是否安全?

Susan Sarandon
发布: 2024-11-10 02:23:02
原创
467 人浏览过

Is it safe to access different members of the same struct from concurrent goroutines in Go?

Go 中结构体成员访问的线程安全

Go 中,从并发 goroutine 访问同一结构体的不同成员安全吗?

考虑这个例子:

package main

type Apple struct {
    color string
    size  uint
}

func main() {
    apple := &Apple{}
    go func() {
        apple.color = "red"
    }()
    go func() {
        apple.size = 42
    }()
}
登录后复制

直观上,这段代码看起来很安全,因为每个goroutine 修改不同的结构成员。然而,潜在的线程安全问题不仅仅限于对同一变量的并发写入。

同时访问不同的结构成员确实是安全的,因为每个成员代表一个不同的变量。然而,需要注意的是,访问 CPU 缓存行中的结构体成员可能会因顺序内存访问而导致性能损失。

虽然 Go 确保不同结构体成员的线程安全,但它不能保证指针更改。同时修改结构指针可能会导致不可预测的行为。因此,避免更改并发 goroutine 中的结构体指针至关重要。

以上是从 Go 中的并发 goroutine 访问同一结构的不同成员是否安全?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板