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>
Lock
잠금을 획득하려면 다음 코드를 사용하세요.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!