Bagaimana untuk Melaksanakan Kunci dengan Tarikh Akhir di Golang?

Linda Hamilton
Lepaskan: 2024-11-01 00:40:36
asal
260 orang telah melayarinya

How to Implement a Lock with a Deadline in Golang?

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)
Salin selepas log masuk

Untuk mengunci, hantar nilai struct ke saluran:

l <- struct{}{}
Salin selepas log masuk

Untuk membuka kunci, terima daripada saluran:

<-l
Salin selepas log masuk

Melakukan Kunci Cuba

Untuk mencuba kunci cuba, gunakan pernyataan pilih :

select {
case l <- struct{}{}:
    // lock acquired
    <-l
default:
    // lock not acquired
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!