Rumah > Artikel > pembangunan bahagian belakang > Bolehkah Semaphore Meniru Penguncian Buffer dalam Go?
Corak Kunci Penampan
Dalam Go, konsep saluran penimbal membolehkan operasi tanpa sekatan sehingga penimbal saluran diisi. Diilhamkan oleh mekanisme ini, pertanyaan timbul: adakah terdapat corak umum yang serupa dengan saluran penimbal untuk "penguncian penimbal", di mana sumber boleh dikunci untuk set pelanggan yang terhad?
Jawapan: Semaphore
Primitif yang memenuhi keperluan ini ialah semaphore. Dibina dengan saluran penimbal, semafor mengenakan had pada bilangan pelanggan serentak yang boleh mengakses sumber.
Pertimbangkan pelaksanaan berikut menggunakan saluran penimbal:
var semaphore = make(chan struct{}, 4) // allow four concurrent users func f() { // Grab the lock. Blocks as long as 4 other invocations of f are still running. semaphore <- struct{}{} // Release the lock once we're done. defer func() { <-semaphore }() // Do work... }
Dalam senario ini , fungsi f memperoleh kunci dengan menghantar nilai ke dalam saluran semafor. Jika saluran penuh, mewakili konkurensi maksimum yang dibenarkan, f menyekat sehingga pelanggan lain melepaskan kunci dengan menerima nilai daripada saluran. Pernyataan tangguh memastikan bahawa kunci dilepaskan apabila fungsi kembali.
Atas ialah kandungan terperinci Bolehkah Semaphore Meniru Penguncian Buffer dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!