gpt4 book ai didi

go - 读取操作是否保证读取某个作者在读取之前写入的值?

转载 作者:行者123 更新时间:2023-12-01 22:33:25 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Is it safe to read a function pointer concurrently without a lock?

(2 个回答)


1年前关闭。




假设有一个名为 s 的变量由两个 go 例程 r1 和 r2 共享,r1(唯一的编写者)写入 s周期性地,而 r2
定期从中读取。 r1 首先启动,然后是 r2。
如果 s不受任何类型的锁(包括 channel )保护,r2 是否可以看到任何不是由 r1 写入的随机值?
如果那会发生吗?请告诉我原因,谢谢!

最佳答案

它不会是“随机的”,但读取的实际值完全取决于它是什么类型、您的架构、编译器如何重新排序语句以及时间。我们称之为 未定义 ,不是随机的。
上以原子方式读取整数等简单数据类型最多架构。所以如果 s是一个简单的 uint32 ,你可能没问题,意思是值(value)可能是由另一个 goroutine 编写的。
任何更复杂的东西(或在其他一些架构上)都会看到新旧值(value)的混合。对于其他数据类型(例如: slice 、映射),实际数据可以在内存中的其他位置重新分配。结果是您的程序的其他部分从未编写过的混搭。

关于go - 读取操作是否保证读取某个作者在读取之前写入的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64003791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com