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!