Bagaimanakah anda boleh melaksanakan kunci terikat masa dalam Go?

Linda Hamilton
Lepaskan: 2024-11-01 04:22:02
asal
603 orang telah melayarinya

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

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

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

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!

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!