首页 > 后端开发 > Golang > 如何防止 Go 中并发 Map 写入崩溃?

如何防止 Go 中并发 Map 写入崩溃?

Patricia Arquette
发布: 2024-12-14 01:58:09
原创
188 人浏览过

How Can I Prevent Concurrent Map Write Crashes in Go?

防止并发映射写入崩溃

当尝试从多个 goroutine 并发写入同一个映射时,Go 1.6 会触发故意崩溃以防止数据损坏。与可以通过使用 defer 和 receive 恢复的恐慌不同,此崩溃是故意的且无法拦截。

要解决此问题,请避免并发写入映射。在提供的示例中:

package main

import "time"

var m = make(map[string]string)

func main() {
    go func() { // Rewrite m["x"] = "foo" in a loop
        for {
            m["x"] = "foo"
        }
    }()
    go func() { // Rewrite m["x"] = "foo" in a loop
        for {
            m["x"] = "bar"
        }
    }()

    time.Sleep(1 * time.Second) // Keep the program running
}
登录后复制

从多个 goroutine 并发写入映射违反了 Go 的映射并发规则,导致故意崩溃。

为了防止这种崩溃并强制数据完整性,考虑使用互斥锁或同步原语来控制对映射的访问。这确保一次只有一个 goroutine 可以修改映射。

以上是如何防止 Go 中并发 Map 写入崩溃?的详细内容。更多信息请关注PHP中文网其他相关文章!

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