首頁 >後端開發 >Golang >如何防止 Go 中並發 Map 寫入崩潰?

如何防止 Go 中並發 Map 寫入崩潰?

Patricia Arquette
Patricia Arquette原創
2024-12-14 01:58:09187瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn