嘗試在Go中取得限時鎖定
Go中內建的sync.Mutex只提供了Lock()和 Unlock() 方法。但是,在某些情況下,能夠嘗試取得具有截止日期的鎖(立即中止或遵守截止日期)會很有幫助。
問題陳述
考慮以下場景:
解決方案:基於通道的互斥
實現在截止日期內獲取鎖的簡單解決方案是使用緩衝區大小為1 的通道作為互斥鎖。
實作
<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>
嘗試鎖定
要嘗試取得鎖定,請使用以下程式碼:
<code class="go">select { case l <- struct{}{}: // Lock acquired defer <-l default: // Lock not acquired }</code>
要嘗試取得鎖定,請使用以下程式碼:
要嘗試取得鎖定,請使用以下程式碼:<code class="go">select { case l <- struct{}{}: // Lock acquired defer <-l case <-time.After(time.Minute): // Lock not acquired }</code>
嘗試使用超時
要嘗試使用超時獲取鎖定,請使用:結論透過利用基於通道的方法,可以在Go 中實現支援逾時嘗試獲取的鎖,從而在處理鎖定場景時提供更大的靈活性時間有限。以上是如何在 Go 中實現限時鎖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!