Penguncian Rekursif dalam Go
Dalam pakej penyegerakan Go, struktur data Mutex tidak menyokong penguncian rekursif. Ini bermakna bahawa goroutine tidak boleh memperoleh kunci yang sama beberapa kali berturut-turut. Walaupun ini mungkin kelihatan seperti pengehadan, terdapat hujah yang kukuh terhadap pelaksanaan kunci rekursif dalam Go.
Menurut Russ Cox, ahli pasukan pembangunan Go, mutex rekursif pada asasnya cacat kerana ia menjejaskan jaminan bahawa mutexes direka untuk menyediakan. Mutexes melindungi invarian, yang merupakan sifat penting struktur data program. Apabila goroutine memperoleh muteks, ia menganggap bahawa invarian dikekalkan.
Walau bagaimanapun, dalam muteks rekursif, goroutine boleh memperoleh kunci yang sama beberapa kali. Ini mewujudkan potensi untuk memecahkan invarian, kerana goroutine boleh membuka kunci mutex dan mengubah suai struktur data sebelum memperolehnya semula. Ini boleh membawa kepada tingkah laku program yang tidak dapat diramalkan dan berkemungkinan tersilap.
Cox mengesyorkan mereka bentuk semula kod untuk mengelakkan keperluan untuk kunci rekursif. Dalam kebanyakan kes, adalah mungkin untuk menulis kod yang beroperasi dengan betul tanpa memerlukan penguncian rekursif.
Jika benar-benar perlu, terdapat penyelesaian yang boleh digunakan untuk mensimulasikan penguncian rekursif dalam Go. Walau bagaimanapun, penyelesaian ini tidak disokong oleh pustaka standard Go dan harus digunakan dengan berhati-hati.
Atas ialah kandungan terperinci Mengapa Mutex Go tidak Menyokong Penguncian Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!