Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda boleh melaksanakan kunci terikat masa dalam Go?

Bagaimanakah anda boleh melaksanakan kunci terikat masa dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-01 04:22:02591semak imbas

How can you implement a time-bound lock in 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:

  • Perkhidmatan RPC sensitif kependaman: Perkhidmatan intensif CPU menerima permintaan sensitif masa. Memperolehi kunci selepas tarikh akhir permintaan akan mengakibatkan sumber terbuang dan prestasi tidak optimum.
  • Mengemas kini statistik objek: Sekumpulan objek perlu dikemas kini dalam tempoh masa tertentu. Percubaan untuk menyentuh objek berkunci tidak boleh melebihi jangka masa yang diberikan.

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!

Kenyataan:
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