Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Memastikan Semua Goroutine Lengkap Apabila Menggunakan Saluran Penampan sebagai Semaphore?

Bagaimana untuk Memastikan Semua Goroutine Lengkap Apabila Menggunakan Saluran Penampan sebagai Semaphore?

Mary-Kate Olsen
Lepaskan: 2024-11-29 06:27:12
asal
359 orang telah melayarinya

How to Ensure All Goroutines Complete When Using a Buffered Channel as a Semaphore?

Menunggu Saluran Penimbalan Kosong (Semaphore)

Dalam pengaturcaraan serentak, adalah penting untuk mengawal bilangan goroutin yang dilaksanakan secara serentak. Satu pendekatan ialah menggunakan saluran buffered sebagai semaphore. Walau bagaimanapun, isu biasa timbul apabila menunggu semaphore mengalir sepenuhnya.

Masalah:

Katakanlah kita mempunyai sepotong integer yang ingin kita proses serentak, dengan had dua serentak pergi rutin. Kami menggunakan saluran penimbal sebagai semafor untuk menguatkuasakan had ini. Walaupun kod berfungsi untuk kebanyakan integer, atur cara keluar lebih awal sebelum rutin pergi terakhir tamat kerana penimbal tidak pernah mencapai kekosongan.

Soalan:

Bagaimanakah kita menunggu saluran penimbal untuk longkang sepenuhnya, memastikan semua rutin pergi selesai sebelum program keluar?

Jawapan:

Menggunakan saluran untuk menunggu keadaan tertentu tidak boleh dilaksanakan kerana kekurangan cara bebas perlumbaan untuk menyemak panjangnya. Sebaliknya, kami boleh menggunakan penyegerakan.WaitGroup untuk memantau penyiapan semua gorouti.

Kod Selesai:

sem := make(chan struct{}, 2)

var wg sync.WaitGroup

for _, i := range ints {
    wg.Add(1)
    // acquire semaphore
    sem <- struct{}{}
    // start long running go routine
    go func(id int) {
        defer wg.Done()
        // do something
        // release semaphore
        <-sem
    }(i)
}

wg.Wait()
Salin selepas log masuk

Dengan menggunakan sync.WaitGroup, kita boleh menunggu sehingga semua gorout selesai sebelum program keluar, memastikan semua pemprosesan selesai.

Atas ialah kandungan terperinci Bagaimana untuk Memastikan Semua Goroutine Lengkap Apabila Menggunakan Saluran Penampan sebagai Semaphore?. 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