Adakah WaitGroup.Wait() Bertindak sebagai Penghalang Memori dalam Go?

Barbara Streisand
Lepaskan: 2024-10-26 11:32:02
asal
215 orang telah melayarinya

 Does WaitGroup.Wait() Act as a Memory Barrier in Go?

Adakah WaitGroup.Wait() Menjamin Penghalang Memori?

Pertimbangkan coretan kod berikut:

var condition bool
var wg sync.WaitGroup
for _, item := range items {
    wg.Add(1)
    go func(item) {
        if meetsCondition(item) {
            condition = true
        }
        wg.Done()
    }(item)
}
wg.Wait()
// is it safe to check condition here?
Salin selepas log masuk

The persoalan timbul sama ada selamat untuk menyemak pembolehubah keadaan selepas wg.Wait() kembali. Dokumentasi Go rasmi tidak menyebut secara eksplisit sebarang implikasi halangan memori, tetapi dokumentasi WaitGroup menyatakan bahawa Tunggu menyekat sehingga kaunter kumpulan tunggu mencapai sifar.

Penyelesaian

Ya, adalah selamat untuk menyemak pembolehubah keadaan selepas wg.Wait() kembali. Terdapat hubungan berlaku-sebelum tersirat antara wg.Wait() dan wg.Done(). Apabila goroutine memanggil wg.Done(), ia memastikan bahawa semua operasinya yang lengkap kelihatan kepada goroutine lain yang telah memanggil wg.Wait(). Oleh itu, wg.Wait() berkesan bertindak sebagai penghalang ingatan, memastikan pembolehubah keadaan dikemas kini sebelum semakan selepas wg.Wait() kembali.

Perhubungan ini berlaku-sebelum tidak didokumenkan secara eksplisit tetapi telah disahkan oleh pembangun Go. Rujuk urutan forum Go di sini untuk mendapatkan butiran lanjut.

Atas ialah kandungan terperinci Adakah WaitGroup.Wait() Bertindak sebagai Penghalang Memori dalam Go?. 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