> 백엔드 개발 > Golang > 이 golang 예제에서 뮤텍스 섹션에 포함된 조건이 교착 상태가 아닌 이유는 무엇입니까?

이 golang 예제에서 뮤텍스 섹션에 포함된 조건이 교착 상태가 아닌 이유는 무엇입니까?

WBOY
풀어 주다: 2024-02-13 18:06:10
앞으로
881명이 탐색했습니다.

为什么在这个 golang 示例中,互斥体部分中包含的条件不会出现死锁?

이 golang 예제에서 뮤텍스 부분에 포함된 조건으로 교착 상태가 발생하지 않는 이유는 뮤텍스가 `Lock()` 및 `Unlock()` 메서드를 통해 공유 리소스에 대한 액세스를 구현하기 때문입니다. 상호 배타적 액세스 . 고루틴이 `Lock()` 메서드를 호출할 때 뮤텍스가 이미 다른 고루틴에 의해 잠긴 경우 해당 고루틴은 뮤텍스가 해제될 때까지 차단됩니다. 이 차단 메커니즘은 뮤텍스가 잠겨 있을 때 여러 고루틴이 동시에 공유 리소스에 액세스하지 않도록 보장하여 교착 상태 발생을 방지합니다. 따라서 이 예에서는 뮤텍스를 올바르게 사용했기 때문에 조건이 교착 상태에 빠지지 않습니다.

질문 내용

O'Reilly에서 교육 중에 이 예를 보았습니다. widgetInventory가 부정적으로 되는 것을 방지해야 하는 조건이 있습니다. 예제는 작동하지만 makeSales가 뮤텍스를 가져오고 widgetInventory가 0일 때 프로그램이 교착 상태에 빠지지 않는 이유를 이해할 수 없습니다.

으아악

makeSales가 뮤텍스를 가져오고 widgetInventory가 0일 때 코드가 교착 상태에 빠질 것으로 예상했습니다.

해결 방법

조건이 뮤텍스와 연관되어 있다는 것을 알지 못했습니다. newPurchase =sync.NewCond(&mutex) .Wait()를 입력하면 뮤텍스의 잠금이 해제되고 조건 신호가 수신되면 이를 다시 획득하려고 시도합니다.

condition.Wait()는 뮤텍스를 획득할 때만 작동하므로 읽기 어려운 코드를 사용하여 작동합니다 :-)

위 내용은 이 golang 예제에서 뮤텍스 섹션에 포함된 조건이 교착 상태가 아닌 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿