Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah anda boleh melaksanakan kunci terikat masa dalam Go?
Percubaan untuk Memperoleh Kunci Terbatas Masa dalam Go
In Go, penyegerakan terbina dalam.Mutex hanya menyediakan Lock() dan kaedah Unlock(). Walau bagaimanapun, terdapat senario di mana ia akan berfaedah untuk mempunyai keupayaan untuk mencuba memperoleh kunci dengan tarikh akhir, sama ada menggugurkan serta-merta atau mematuhi tarikh akhir.
Pernyataan Masalah
Pertimbangkan perkara berikut senario:
Penyelesaian: Mutex berasaskan saluran
Penyelesaian mudah untuk mencapai pemerolehan kunci dengan tarikh akhir ialah untuk menggunakan saluran dengan saiz penimbal satu sebagai a mutex.
Pelaksanaan
<code class="go">l := make(chan struct{}, 1) // Lock: send a struct to the channel l <- struct{}{} // Unlock: receive a struct from the channel <-l</code>
Cuba Kunci
Untuk cuba mendapatkan kunci, gunakan kod berikut:
<code class="go">select { case l <- struct{}{}: // Lock acquired defer <-l default: // Lock not acquired }</code>
Cuba dengan Tamat masa
Untuk cuba mendapatkan kunci dengan tamat masa, gunakan:
<code class="go">select { case l <- struct{}{}: // Lock acquired defer <-l case <-time.After(time.Minute): // Lock not acquired }</code>
Kesimpulan
Dengan menggunakan pendekatan berasaskan saluran , adalah mungkin untuk melaksanakan kunci yang menyokong percubaan pemerolehan dengan tamat masa dalam Go, memberikan lebih fleksibiliti dalam pengendalian mengunci senario dengan kekangan masa.
Atas ialah kandungan terperinci Bagaimanakah anda boleh melaksanakan kunci terikat masa dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!