Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyelesaikan Kebuntuan 'Semua Goroutine Tidur' Go dalam Komunikasi Goroutine?

Bagaimana untuk Menyelesaikan Kebuntuan 'Semua Goroutine Tidur' Go dalam Komunikasi Goroutine?

Mary-Kate Olsen
Lepaskan: 2024-12-14 11:20:19
asal
331 orang telah melayarinya

How to Resolve Go's

Kebuntuan dalam Go: Memahami dan Menyelesaikan "Semua Goroutine Sudah Tidur"

Dalam coretan kod Go yang disediakan, kebuntuan berlaku disebabkan oleh salah faham komunikasi goroutine. Program ini bertujuan untuk mensimulasikan pemunggahan dan pemunggahan trak, menggunakan goroutin untuk mengendalikan pemunggahan trak. Walau bagaimanapun, kod tersebut gagal menutup saluran trak (ch) apabila proses pemuatan selesai, membawa kepada jalan buntu.

Untuk menyelesaikan kebuntuan ini, adalah penting untuk menutup saluran trak (ch) sebaik sahaja semua trak telah dimuatkan. Ini memberi isyarat kepada goroutine UnloadTrucks bahawa tiada lagi trak akan dihantar, membolehkannya kembali.

Salah satu cara untuk mencapai ini adalah melalui penggunaan WaitGroup, seperti yang ditunjukkan dalam kod berikut:

// Define a WaitGroup to track the completion of the loading goroutines
var wg sync.WaitGroup

// Start goroutines to load trucks
go func() {
    // Load trucks and send them over the truck channel
    for t := range trucks {
        go func(tr Truck) {
            itm := Item{}
            itm.name = "Groceries"

            fmt.Printf("Loading %s\n", tr.name)
            tr.Cargo = append(tr.Cargo, itm)
            ch <- tr

            wg.Done() // Signal the WaitGroup that the loading is complete
        }(trucks[t])
    }
}()

// Use the WaitGroup to wait for all loading goroutines to complete
wg.Wait()

// Close the truck channel after all loading is finished
close(ch)

// Start the UnloadTrucks goroutine
UnloadTrucks(ch)
Salin selepas log masuk

Dengan menutup saluran trak (ch) setelah semua trak telah dimuatkan, goroutine UnloadTrucks dibenarkan untuk menamatkan, memecahkan kebuntuan. Program kini akan selesai dengan jayanya, memunggah semua trak seperti yang dimaksudkan.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Kebuntuan 'Semua Goroutine Tidur' Go dalam Komunikasi Goroutine?. 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