go map结构是线程安全的吗?

发布于 2024-08-16 13:47:48 字数 73 浏览 6 评论 0原文

Go的map类型线程安全吗?我有一个程序,有许多 goroutine 读取和写入映射类型。如果我需要实施保护机制,最好的方法是什么?

Is the Go map type thread safe? I have a program that has many goroutines reading and writing to a map type. If I need to implement a protection mechanism, what's the best way to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏见 2024-08-23 13:47:48

您希望使用 goroutine 并通过 频道 同步对地图的访问。 常见问题解答的说明:

经过长时间的讨论,我们决定地图的典型用途
不需要从多个线程进行安全访问,并且在这些情况下
在它所做的地方,地图可能是一些更大的数据结构的一部分
或已经同步的计算。因此要求
所有映射操作都会获取互斥锁,这会减慢大多数程序的速度并添加
少数人的安全。然而,这并不是一个容易的决定,因为这意味着
不受控制的地图访问可能会使程序崩溃。

该语言并不排除原子地图更新。当需要时,诸如
当托管不受信任的程序时,实施可以
联锁地图访问。

You'd want to use goroutines and synchronize access to your maps via channels. Explanation from the FAQ:

After long discussion it was decided that the typical use of maps did
not require safe access from multiple threads, and in those cases
where it did, the map was probably part of some larger data structure
or computation that was already synchronized. Therefore requiring that
all map operations grab a mutex would slow down most programs and add
safety to few. This was not an easy decision, however, since it means
uncontrolled map access can crash the program.

The language does not preclude atomic map updates. When required, such
as when hosting an untrusted program, the implementation could
interlock map access.

空城仅有旧梦在 2024-08-23 13:47:48

Go 1.9 开始,最好的方法是使用 sync.Map 类型。

Since Go 1.9 the best way is to use sync.Map type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文