Memperoleh Kunci dengan Kekangan Masa di Golang
Apabila bekerja dengan kunci di Golang, terdapat situasi di mana anda mungkin perlu sama ada memperoleh kunci segera atau patuhi beberapa bentuk tarikh akhir. Walaupun penyegerakan perpustakaan standard.Mutex hanya menyediakan fungsi Lock() dan Unlock(), terdapat teknik yang membolehkan anda meniru kunci dengan tarikh akhir.
Melaksanakan Kunci dengan Tarikh Akhir
Untuk membuat kunci dengan tarikh akhir, anda boleh menggunakan saluran dengan saiz penimbal satu:
l := make(chan struct{}, 1)
Untuk mengunci, hantar nilai struct ke saluran:
l <- struct{}{}
Untuk membuka kunci, terima daripada saluran:
<-l
Melakukan Kunci Cuba
Untuk mencuba kunci cuba, gunakan pernyataan pilih :
select { case l <- struct{}{}: // lock acquired <-l default: // lock not acquired }
Kod ini akan segera memperoleh kunci jika ia tersedia. Jika kunci sudah ditahan, pernyataan pilih akan menyekat sehingga kunci dilepaskan.
Cuba Kunci dengan Tamat Masa
Untuk menentukan tamat masa bagi kunci cuba, tambah satu masa.Selepas() saluran ke penyataan pilih:
select { case l <- struct{}{}: // lock acquired <-l case <-time.After(time.Minute): // lock not acquired }
Kod ini akan cuba memperoleh kunci sehingga satu minit. Jika tamat masa tamat, pernyataan pilih akan keluar dan kunci tidak akan diperoleh.
Kesimpulan
Menggunakan saluran dengan saiz penimbal satu sebagai mutex membolehkan anda melaksanakan kunci percubaan dengan tarikh akhir. Teknik ini boleh berguna dalam senario di mana anda perlu memperoleh kunci dengan cepat atau dalam jangka masa tertentu.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kunci dengan Tarikh Akhir di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!