Rumah >pembangunan bahagian belakang >Golang >Adakah saya perlu membuka kuncinya sebelum menyiarkan?
Editor PHP Xiaoxin hadir untuk mendedahkan soalan popular untuk semua orang: "Adakah saya perlu membuka kuncinya sebelum menyiarkan soalan ini, jawapannya adalah ya?" Dalam industri televisyen moden, operasi membuka kunci biasanya diperlukan sebelum program boleh disiarkan. Ini kerana membuka kunci memastikan penghantaran isyarat program yang selamat dan berkesan menghalang tontonan tanpa kebenaran. Selain itu, membuka kunci juga boleh melindungi hak dan kepentingan sah hak cipta dan kandungan program, serta memberikan pengalaman tontonan berkualiti tinggi untuk majoriti penonton. Oleh itu, sebelum menonton sebarang rancangan, sila pastikan operasi membuka kunci selesai untuk mengelakkan kehilangan kandungan yang menarik.
Saya keliru tentang kelakuan pembolehubah keadaan dalam Go.
Dalam goroutine utama, saya memperoleh kunci dan memanggil Cond.Wait()
dalam gelung for untuk menyemak memori yang dikongsi. Dalam goroutine yang berfungsi, saya memperoleh kunci dan mengubah suai memori yang dikongsi, kemudian disiarkan.
Saya perasan bahawa apabila Cond.Wait()
恢复时,它会在返回之前先尝试获取锁。但是, Cond.Broadcast()
menyambung semula, ia cuba mendapatkan kunci sebelum kembali. Walau bagaimanapun, Cond.Broadcast()
tidak melepaskan kunci. Jadi jika saya tidak melepaskan kunci sendiri sebelum bersiaran, bukankah harus ada jalan buntu?
Saya membaca beberapa kod menggunakan sync.Cond
dan mendapati ia tidak perlu, tetapi tidak tahu mengapa. sync.Cond
阅读了一些代码,发现没有必要,但不知道为什么。
修改共享变量时必须保持锁定。当一个goroutine调用Wait
时,锁被解锁,因此另一个goroutine可以锁定它并修改共享变量。当您调用 Broadcast
Tunggu
, kunci dibuka supaya goroutine lain boleh menguncinya dan mengubah suai pembolehubah yang dikongsi. Goroutine mungkin atau mungkin tidak memegang kunci apabila anda memanggil Broadcast
. Jika goroutine memegang kunci, goroutine yang menunggu akan dikejutkan dan menunggu sehingga mereka boleh memperoleh kunci. Apabila anda membuka kunci, salah satu goroutine yang menunggu boleh memperoleh kunci dan meneruskan. 🎜
🎜Jadi, tidak, selagi goroutine siaran akhirnya melepaskan kunci, tidak akan ada kebuntuan. 🎜Atas ialah kandungan terperinci Adakah saya perlu membuka kuncinya sebelum menyiarkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!