Rumah > pembangunan bahagian belakang > Golang > Adakah Peta Lelaran Over Go serentak dengan `julat` Selamat, dan Bagaimana Ia Boleh Dicapai?

Adakah Peta Lelaran Over Go serentak dengan `julat` Selamat, dan Bagaimana Ia Boleh Dicapai?

Susan Sarandon
Lepaskan: 2024-12-13 17:43:21
asal
609 orang telah melayarinya

Is Concurrent Iteration Over Go Maps with `range` Safe, and How Can It Be Achieved?

Akses Serentak ke Peta dengan Julat dalam Go

Konsep akses serentak kepada peta menggunakan kata kunci julat dalam Go sering disalahertikan. Untuk menjelaskan perkara ini, mari kita terokai selok-belok mengakses peta secara serentak dan implikasi penggunaan julat.

Penilaian Ungkapan Julat

Ungkapan julat dalam pernyataan for hanya dinilai sekali sebelum gelung bermula, tidak termasuk senario tertentu tertentu. Dalam kes peta, ungkapan julat hanya menunjuk kepada pembolehubah peta.

Lelaran dengan Julat

Semasa lelaran dengan julat, pembolehubah kunci dan nilai (k dan v dalam kebanyakan kes) pegang nilai dari peta semasa setiap lelaran. Walau bagaimanapun, capaian peta tidak berlaku dalam blok for semasa melaksanakan lelaran. Ia berlaku apabila nilai k dan v ditetapkan untuk lelaran seterusnya.

Lelaran Serentak Selamat

Memahami konsep ini, adalah selamat untuk melakukan lelaran serentak di atas peta dengan menggunakan kunci untuk melindungi peta semasa lelaran. Walau bagaimanapun, membuka kunci dalam lelaran harus dilakukan sebagai pernyataan tertunda untuk mengendalikan pulangan awal.

var testMap = make(map[int]int)
var testMapLock = &sync.RWMutex{}

func IterateMapKeys(iteratorChannel chan int) error {
    testMapLock.RLock()
    defer testMapLock.RUnlock()
    for k, v := range testMap {
        testMapLock.RUnlock()
        someFunc()
        testMapLock.RLock()
        if someCond {
            return someErr
        }
    }
    return nil
}
Salin selepas log masuk

Pengubahsuaian Serentak

Adalah penting untuk ambil perhatian bahawa skim penguncian jenis ini hanya selamat daripada akses serentak . Ia tidak menghalang pengubahsuaian serentak oleh goroutine lain. Walau bagaimanapun, jika pengubahsuaian dikawal dengan kunci tulis, ia kekal selamat, tetapi gelung for tidak semestinya akan berulang pada pasangan baharu.

Amalan Tidak Selamat

Membuka kunci baca dalam blok untuk adalah tidak selamat, kerana ia membenarkan gorouti lain mengubah suai peta dan berpotensi menyebabkan keadaan perlumbaan.

Atas ialah kandungan terperinci Adakah Peta Lelaran Over Go serentak dengan `julat` Selamat, dan Bagaimana Ia Boleh Dicapai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan