Golang ialah bahasa pengaturcaraan yang cekap, ringkas dan serentak. Di Golang, cond ialah alat yang digunakan untuk mengawal pelaksanaan program serentak. Artikel ini akan memperkenalkan penggunaan cond secara terperinci.
1. Pengenalan asas kepada cond
Cond bermaksud pembolehubah keadaan, yang merupakan mekanisme kawalan serentak yang penting di Golang. Fungsi utama cond adalah untuk membenarkan berbilang goroutine menunggu keadaan pembolehubah yang dikongsi berubah pada masa yang sama, dan untuk memberitahu goroutine yang menunggu untuk melaksanakan operasi seterusnya apabila keadaan pembolehubah yang dikongsi berubah. Tidak seperti mutex, cond tidak boleh digunakan untuk melindungi akses serentak kepada pembolehubah dikongsi, ia perlu bergantung pada mutex untuk menyelesaikannya. Penggunaan asasnya sangat mudah dan dibahagikan kepada tiga langkah:
Dalam aplikasi praktikal, cond biasanya digunakan dalam kombinasi dengan mutex untuk mencapai akses selamat serentak kepada pembolehubah dikongsi. Berikut ialah contoh program mudah yang menunjukkan cara menggunakan cond untuk mengawal pelaksanaan serentak berbilang goroutine:
Dalam kod sampel ini, kiraan mewakili pembolehubah kongsi dengan nilai awal 0, menunjukkan bahawa ia boleh dilaksanakan Bilangan tugas. Apabila nilai kiraan pembolehubah kongsi kurang daripada 10, semua goroutin pekerja akan menunggu sehingga nilai kiraan pembolehubah dikongsi dinaikkan kepada lebih daripada 10 sebelum dikejutkan.package main import ( "fmt" "sync" ) var ( count int mutex sync.Mutex cond *sync.Cond = sync.NewCond(&mutex) ) func worker() { for { mutex.Lock() for count < 10 { cond.Wait() } count-- fmt.Printf("worker: %d\n", count) mutex.Unlock() cond.Signal() } } func main() { for i := 0; i < 10; i++ { go worker() } for { mutex.Lock() if count >= 10 { mutex.Unlock() break } count++ fmt.Printf("main: %d\n", count) mutex.Unlock() cond.Signal() } }
Dalam goroutine utama, tingkatkan nilai kiraan pembolehubah yang dikongsi dengan memanggil fungsi cond.Signal() dalam gelung, dan maklumkan goroutine pekerja yang menunggu untuk meneruskan pelaksanaan. Apabila nilai kiraan pembolehubah yang dikongsi dinaikkan kepada 10, goroutine utama berhenti memanggil fungsi cond.Signal() dan semua goroutine pekerja keluar dari pelaksanaan.
Perlu diingat bahawa apabila goroutine menunggu kod, ia akan melepaskan kunci mutex secara automatik supaya goroutine lain boleh mengakses pembolehubah yang dikongsi. Setelah terjaga, goroutine perlu mendapatkan semula kunci mutex untuk meneruskan pelaksanaan.
3. Langkah berjaga-jaga untuk cond
Walaupun menggunakan cond adalah mekanisme penyegerakan yang cekap berbanding dengan mekanisme pembolehubah keadaan tradisional, terdapat juga perkara yang perlu diberi perhatian apabila menggunakannya:
fungsi cond.Wait() hendaklah sentiasa digunakan dalam gelung for untuk mengelakkan bangun tidur palsu apabila Sebelum cond, mutex harus dimulakan;Atas ialah kandungan terperinci Pengenalan terperinci penggunaan golang cond. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!