1. Apakah kebuntuan?
Dalam pengaturcaraan serentak, apabila dua atau lebih proses (benang) menunggu sumber masing-masing dikeluarkan, kebuntuan berlaku. Ringkasnya, setiap proses menduduki sebahagian daripada sumber dan perlu menunggu pihak lain mengeluarkan sumber untuk menyelesaikan tugasnya sendiri, tetapi pihak lain melakukan perkara yang sama Ini akan menyebabkan gelung menunggu yang tidak berkesudahan membawa kepada keruntuhan keseluruhan sistem.
2. Golang melaksanakan kebuntuan
golang menyediakan pakej penyegerakan untuk menyokong operasi serentak, yang mana Mutex ialah salah satu jenis kunci biasa dalam golang. Mari kita ambil Mutex sebagai contoh untuk menunjukkan pelaksanaan kebuntuan golang.
Contoh kod:
package main import ( "sync" ) var mu sync.Mutex func main() { mu.Lock() go func() { mu.Lock() }() mu.Unlock() }
Dalam kod ini, kami mencipta mu pembolehubah jenis Mutex Mula-mula, kami memanggil kaedah Kunci mu, dapatkan kunci mutex dan Masukkan kritikal zon. Seterusnya, kami mencipta proses pergi, di mana kami cuba mendapatkan kaedah Lock mu sekali lagi. Akhirnya kami melepaskan kunci mu mutex.
Jika kami mengalih keluar pernyataan mu.Unlock() dalam kod di atas, maka keseluruhan program akan menemui jalan buntu. Kerana dalam proses pergi, ia akan menunggu proses utama untuk melepaskan kunci sebelum ia boleh memperoleh kunci Walau bagaimanapun, proses utama tidak boleh terus berjalan kerana kunci tidak dilepaskan. Dengan cara ini, keseluruhan program akan kekal di sana dan menjadi proses zombi sehingga sistem ditamatkan secara paksa.
3. Bagaimana untuk mengelakkan kebuntuan?
Apabila berbilang proses (benang) berkongsi sumber yang sama, kebuntuan cenderung berlaku. Jadi, bagaimana untuk mengelakkan kebuntuan? Anda boleh merujuk perkara berikut:
Ringkasnya, kebuntuan ialah masalah biasa dalam pengaturcaraan serentak dan boleh berlaku dengan mudah dalam senario dengan persaingan sengit untuk mendapatkan sumber. Untuk mengelakkan kebuntuan, kita perlu mematuhi perjanjian tertentu, merancang dan menggunakan sumber secara munasabah, mendapatkan sumber dengan ketat mengikut urutan ia diperoleh, dan menggunakan beberapa mekanisme yang disediakan oleh golang untuk mengelakkan persaingan kunci.
Atas ialah kandungan terperinci Apakah kebuntuan dalam golang? Bagaimana untuk mengelakkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!