교착 상태 - 모든 고루틴이 잠자기 상태입니다(대기 그룹을 사용하더라도).

PHPz
풀어 주다: 2024-02-09 13:40:08
앞으로
1147명이 탐색했습니다.

死锁 - 所有 goroutine 都处于睡眠状态(即使使用等待组)

PHP 편집자 Xiaoxin은 일반적인 동시 프로그래밍 문제인 교착 상태를 소개하기 위해 왔습니다. 교착 상태는 모든 고루틴이 절전 상태에 진입하여 대기 그룹과 같은 메커니즘을 사용해도 계속 실행할 수 없음을 의미합니다. 이 경우 모든 고루틴이 앞으로 나아갈 수 없어 프로그램이 무한 대기 상태에 빠지게 됩니다. 동시 프로그래밍에서는 교착 상태를 피하는 것이 매우 중요하며, 프로그램이 정상적으로 작동하려면 교착 상태의 원인과 해결 방법을 이해해야 합니다.

질문 내용

저는 바둑 동시성을 배우고 있는데 두 바둑 루틴이 채널을 통해 업데이트된 값을 전달하면서 계속해서 서로 통신하기를 원합니다. 하나는 2를 더하고 다른 하나는 1을 뺍니다. 코드와 출력은 다음과 같습니다:

이 코드에 어떤 문제가 있나요?

으아악

출력:

으아악

그러면 종료됩니다.

고루틴에서 wg.done()을 호출하지 않아도 왜 고루틴은 항상 값을 교환하지 않나요?

해결 방법

시작하는 두 goroutine 모두 값을 받고 값을 보낸 다음 종료됩니다. 거기부터는 그냥 main goroutine,在 wg.wait() 处被阻止,因为你从未调用 wg.done()입니다.

(n 무한) 루프를 사용하는 것을 잊어버렸습니다:

으아악

이 변경으로 인해 애플리케이션은 영원히 실행되며 출력은 다음과 같습니다.

으아악

위 내용은 교착 상태 - 모든 고루틴이 잠자기 상태입니다(대기 그룹을 사용하더라도).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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