Tunggu Peletakan Kumpulan untuk Pengiraan Tepat
Dalam pengaturcaraan serentak, jenis penyegerakan.WaitGroup berfungsi sebagai penyegerakan primitif untuk menyelaraskan goroutin. Ia menjejaki bilangan tugasan yang perlu diselesaikan sebelum panggilan menyekat ke wg.Wait() boleh diteruskan.
Penempatan wg.Add() yang Betul
Kepada memastikan pengiraan tugas yang tepat, adalah penting untuk memanggil wg.Add(1) sebelum melancarkan goroutine yang kemudiannya memanggil wg.Done(). Peletakan ini menjamin bahawa goroutine utama akan disekat di wg.Tunggu() sehingga semua goroutine yang dilancarkan selesai.
Akibat Peletakan Ganti
Seperti yang ditunjukkan dalam kod contoh, meletakkan wg.Tambah(1) dalam goroutine boleh membawa kepada penyiapan pramatang wg.Tunggu(). Ini berlaku kerana, dalam goroutine yang sama, wg.Done() dipanggil serta-merta selepas wg.Add(1), menyebabkan goroutine utama menyambung semula pelaksanaan sebelum semua tugasan selesai.
Penyelesaian Deterministik
Apabila wg.Add() diletakkan dengan betul sebelum goroutine dilancarkan, goroutine utama tidak boleh mencapai wg.Tunggu() sehingga selepas gelung for. Ini memastikan bahawa wg.Add() dipanggil tepat 100 kali, dan dengan itu wg.Wait() menyekat sehingga wg.Done() dipanggil 100 kali.
Alternatif
Sebagai alternatif, jika bilangan lelaran gelung diketahui lebih awal, wg.Add(100) boleh dipanggil sebelum gelung. Walau bagaimanapun, pendekatan ini harus digunakan dengan berhati-hati, kerana ia menganggap tiada langkau bersyarat dalam gelung.
Amalan Terbaik
Untuk penggunaan penyegerakan yang konsisten dan boleh dipercayai.WaitGroup, ikut garis panduan ini:
Atas ialah kandungan terperinci Di Mana Anda Harus Letakkan `wg.Add()` untuk Pengiraan Tepat dalam `sync.WaitGroup` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!