gpt4 book ai didi

go - 并发写入包含 Golang 中另一个 Map 的 Map

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:19 25 4
gpt4 key购买 nike

在 Golang 中,我们必须将并发更改同步到 Map。如果我的 map 包含另一个像这样的 map :

map[string]map[string]*CustomStruct

.. 在写东西的时候我必须在所有这些中使用 Lock 吗?

如果我将一些东西写入内部 Map -> 外部 Map 也会被更改,所以我仍然必须同步外部 Map 的更改。

如果我锁定外部 Map 的更改 -> 没有其他人可以写入内部 Map -> 锁定内部 Map 没有意义。

我是对的还是它以不同的方式工作并且我必须锁定所有 map ?

最佳答案

我的理解是这里没有任何硬性规定。

例如,您可以通过一个甚至没有存储在 map 上的互斥锁来协调所有 map 写入,任何互斥锁和您的 map 之间没有内在联系 - 这只是关于您如何使用它们来协调对数据的访问。

本质上,如果您锁定单个元素,您将看到较少的锁争用,因为获得锁的频率较低,如果您对所有映射使用外部锁,则会出现更多争用,因为更多进程将尝试获得相同的锁锁,这将减少您的流程可以完成的实际工作量。

最终由您决定什么最适合您的用例

帮助解决这个问题:

go 1.9 中提供了一个新工具,可让您对锁争用进行基准测试,以了解哪种方法对您的应用程序最有效。

使用 -race 标志构建和运行您的应用程序将有助于确定锁是否正确完成其工作

你也可以看看我还没有玩过的新同步 map ,但我知道会为你处理:

Sync maps

关于go - 并发写入包含 Golang 中另一个 Map 的 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46514016/

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