「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Golang で期限付きのロックを実装するにはどうすればよいですか?

Golang で期限付きのロックを実装するにはどうすればよいですか?

2024 年 11 月 9 日に公開
ブラウズ:699

How to Implement a Lock with a Deadline in Golang?

Golang で時間制約のあるロックを取得する

Golang でロックを操作する場合、状況によってはロックを取得する必要がある場合があります。直ちに、または何らかの形の期限を遵守してください。標準ライブラリの sync.Mutex は Lock() 関数と Unlock() 関数のみを提供しますが、期限付きロックをエミュレートできる手法があります。

期限付きロックの実装

期限付きのロックを作成するには、バッファ サイズが 1 のチャネルを使用できます:

l := make(chan struct{}, 1)

ロックするには、構造体の値をチャネルに送信します:

l 

ロックを解除するには、受信しますチャンネルから:

トライの実行Lock

ロックを試行するには、select ステートメントを使用します。

select {
case l 

このコードは、ロックが利用可能な場合は直ちにロックを取得します。ロックがすでに保持されている場合、select ステートメントはロックが解放されるまでブロックされます。

タイムアウト付きのロックの試行

試行ロックのタイムアウトを指定するには、次を追加します。 select ステートメントへの time.After() チャネル:

select {
case l 

このコードは、最大 1 分間ロックの取得を試みます。タイムアウトが経過すると、select ステートメントは終了し、ロックは取得されません。

結論

バッファ サイズ 1 のチャネルをミューテックスとして使用する期限付きの試行ロックを実装できます。この手法は、ロックを迅速に取得する必要があるシナリオ、または特定の時間枠内にロックを取得する必要があるシナリオで役立ちます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3