PHP 편집자 Xiaoxin은 일반적인 동시 프로그래밍 문제인 교착 상태를 소개하기 위해 왔습니다. 교착 상태는 모든 고루틴이 절전 상태에 진입하여 대기 그룹과 같은 메커니즘을 사용해도 계속 실행할 수 없음을 의미합니다. 이 경우 모든 고루틴이 앞으로 나아갈 수 없어 프로그램이 무한 대기 상태에 빠지게 됩니다. 동시 프로그래밍에서는 교착 상태를 피하는 것이 매우 중요하며, 프로그램이 정상적으로 작동하려면 교착 상태의 원인과 해결 방법을 이해해야 합니다.
저는 바둑 동시성을 배우고 있는데 두 바둑 루틴이 채널을 통해 업데이트된 값을 전달하면서 계속해서 서로 통신하기를 원합니다. 하나는 2를 더하고 다른 하나는 1을 뺍니다. 코드와 출력은 다음과 같습니다:
이 코드에 어떤 문제가 있나요?
으아악출력:
으아악그러면 종료됩니다.
고루틴에서 wg.done()을 호출하지 않아도 왜 고루틴은 항상 값을 교환하지 않나요?
시작하는 두 goroutine 모두 값을 받고 값을 보낸 다음 종료됩니다. 거기부터는 그냥main
goroutine,在wg.wait()
处被阻止,因为你从未调用wg.done()
입니다.
(n 무한) 루프를 사용하는 것을 잊어버렸습니다:
으아악이 변경으로 인해 애플리케이션은 영원히 실행되며 출력은 다음과 같습니다.
으아악위 내용은 교착 상태 - 모든 고루틴이 잠자기 상태입니다(대기 그룹을 사용하더라도).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!