Akses Serentak ke Peta dengan 'julat' dalam Go
Dalam entri blog "Go maps in action", dokumentasi menyatakan bahawa memetakan tidak selamat untuk kegunaan serentak tanpa mekanisme penyegerakan seperti penyegerakan.RWMutex. Walau bagaimanapun, tidak jelas sama ada akses melalui lelaran julat membentuk "baca" atau jika kata kunci julat mempunyai keperluan penguncian khusus.
Keselarasan julat
Ungkapan julat ialah dinilai sekali sebelum gelung bermula. Untuk peta, ini bermakna pembolehubah peta (cth., testMap) hanya dinilai sekali, walaupun pasangan nilai kunci baharu boleh ditambah atau dialih keluar semasa lelaran. Pemisahan antara penilaian awal dan lelaran itu sendiri membayangkan bahawa peta tidak diakses oleh pernyataan for semasa melaksanakan lelaran.
Lelaran Selamat
Oleh itu, perkara berikut lelaran selamat untuk akses serentak:
func IterateMapKeys(iteratorChannel chan int) error { testMapLock.RLock() defer testMapLock.RUnlock() mySeq := testMapSequence for k, _ := range testMap { .... } return nil }
Reka bentuk ini memastikan peta dikunci hanya apabila perlu, sambil membenarkan akses serentak kepada gorouti lain.
Pengubahsuaian Serentak
Walau bagaimanapun, penguncian jenis ini hanya menghalang akses serentak, bukan pengubahsuaian serentak. Ada kemungkinan goroutine lain memperoleh kunci tulis dan mengubah suai peta walaupun semasa lelaran sedang berjalan. Untuk mengelakkan ini, peta harus kekal dikunci sepanjang lelaran.
Contoh
Contoh ini menunjukkan perbezaan antara membuka kunci dan mengunci dalam blok untuk:
func IterateMapKeys(iteratorChannel chan int) error { testMapLock.RLock() defer testMapLock.RUnlock() mySeq := testMapSequence for k, _ := range testMap { testMapLock.RUnlock() .... testMapLock.RLock() .... } return nil }
Dalam contoh ini, melepaskan kunci baca dalam blok untuk membolehkan pengubahsuaian dan potensi serentak ralat.
Kesimpulan
Kata kunci julat itu sendiri tidak menyediakan penyegerakan untuk akses serentak kepada peta. Menggunakan mekanisme penyegerakan yang betul (cth., penyegerakan.RWMutex) adalah penting untuk memastikan keselamatan lelaran dan pengubahsuaian serentak.
Atas ialah kandungan terperinci Adakah Kata Kunci `julat` Go Selamat untuk Akses Peta Serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!