Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyelesaikan Kebuntuan dalam Pergi Apabila Semua Goroutine Tidur?

Bagaimana untuk Menyelesaikan Kebuntuan dalam Pergi Apabila Semua Goroutine Tidur?

Susan Sarandon
Susan Sarandonasal
2024-12-24 10:43:171041semak imbas

How to Resolve Deadlocks in Go When All Goroutines Are Asleep?

Kebuntuan dalam Go: "Semua Goroutine Tidur"

Apabila bekerja dengan goroutine, adalah penting untuk mengurus operasi saluran dengan berkesan untuk mengelakkan kebuntuan. Ini berlaku apabila semua goroutine disekat selama-lamanya, membawa kepada situasi kebuntuan.

Memahami Kod

Mari kita periksa kod yang disediakan:

Kod ini mencipta saluran jenis Lori dan melancarkan dua gorout untuk mensimulasikan trak pemuatan dengan barangan runcit dan menghantarnya ke saluran. Ia kemudian memanggil UnloadTrucks untuk mendapatkan dan mencetak kandungan trak.

Punca Kebuntuan

Isunya terletak pada ketiadaan mekanisme untuk menutup saluran ch. Apabila semua goroutine telah menghantar trak mereka ke saluran, tiada isyarat untuk menamatkan gelung dalam UnloadTrucks. Ini bermakna ch terus mendengar nilai yang tidak pernah tiba, mengakibatkan kebuntuan.

Penyelesaian

Untuk menyelesaikan kebuntuan, kita perlu menutup saluran ch secara eksplisit apabila goroutine pemuatan selesai. Kita boleh menggunakan penyegerakan.WaitGroup untuk mengira gorouti yang sedang berjalan dan menutup saluran apabila semua telah selesai:

Pengubahsuaian ini memastikan UnloadTrucks akan ditamatkan sebaik sahaja semua gorouti telah selesai memuatkan trak. Fungsi Tunggu menyekat sehingga kaunter WaitGroup mencapai sifar, menunjukkan bahawa semua goroutine telah menyelesaikan kerja mereka. Menutup saluran memberi isyarat kepada UnloadTrucks bahawa tiada lagi trak yang akan diterima, membolehkannya keluar dari gelung dengan anggun.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Kebuntuan dalam Pergi Apabila Semua Goroutine Tidur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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