Rumah >pembangunan bahagian belakang >Golang >Bagaimana Saya Boleh Mencegah Ranap Tulis Peta Serentak dalam Go?

Bagaimana Saya Boleh Mencegah Ranap Tulis Peta Serentak dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-14 01:58:09271semak imbas

How Can I Prevent Concurrent Map Write Crashes in Go?

Mencegah Ranap Tulis Peta Serentak

Apabila cuba menulis serentak pada peta yang sama daripada berbilang goroutine, Go 1.6 mencetuskan ranap yang disengajakan untuk mengelakkan rasuah data. Tidak seperti panik yang boleh dipulihkan daripada menggunakan tangguh dan pulih, ranap sistem ini adalah disengajakan dan tidak boleh dipintas.

Untuk menyelesaikan isu ini, elakkan penulisan serentak pada peta. Dalam contoh yang disediakan:

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
}

Tulisan serentak pada peta daripada berbilang goroutin melanggar peraturan konkurensi Go untuk peta, menyebabkan ranap yang disengajakan.

Untuk mengelakkan ranap ini dan menguatkuasakan integriti data, pertimbangkan untuk menggunakan mutex atau penyegerakan primitif untuk mengawal akses kepada peta. Ini memastikan bahawa hanya satu goroutine boleh mengubah suai peta pada satu masa.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Mencegah Ranap Tulis Peta Serentak dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn