PHP 편집자 Xinyi는 "내 고루틴이 다음 뮤텍스 코드에서 멈추는 원인은 무엇입니까?"라는 일반적인 질문에 답하기 위해 왔습니다. 동시 프로그래밍에서 뮤텍스 잠금(Mutex)을 사용하는 것이 일반적입니다. 해결 방법 중 하나 공유 자원에 대한 경쟁. 그러나 코드에 문제가 있는 경우 고루틴이 교착 상태에 빠져 실행을 계속할 수 없게 될 수 있습니다. 다음으로 이 문제의 가능한 원인을 자세히 논의하고 해결책을 제시하겠습니다.
열쇠 지도를 저장하려고 하는데, 각 열쇠에는 별도의 자물쇠가 있습니다. 특정 키에 대한 잠금을 생성할 때 전역 뮤텍스를 사용하여 맵에 씁니다.
열쇠에 대한 자물쇠 생성을 마친 후 새 자물쇠를 사용하고 작업이 완료되면 해제하겠습니다. 현재 코드를 테스트하기 위해 단일 키를 수정하려고 합니다.
코드는 다음과 같습니다:
으아악왜 잠금을 획득할 수 없는지 모르겠습니다. 플레이그라운드 링크: https://go.dev/play/p/-co0xaxpuy0
mylock은 전역 뮤텍스와 개별 뮤텍스를 잠글 수 있습니다. 이로 인해 어떤 경우에는 잠금 해제가 불가능해집니다:
이 문제를 해결하려면 잠금을 (해제)하는 대신 전역 잠금을 누른 상태에서 개별 잠금을 반환하세요. myunlock 기능이 불필요해졌습니다:
으아악성능을 향상하려면 먼저 전역 읽기 잠금만 유지하면서 단일 잠금이 존재하는지 확인할 수 있습니다(이렇게 하면 count
가 나타내는 내용이 변경된다는 점에 유의하세요).
위 내용은 내 고루틴이 다음 뮤텍스 코드에서 멈추는 원인은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!