치명적인 오류: 모든 고루틴이 잠자기 상태입니다. 교착 상태입니다! 오류 실행

王林
풀어 주다: 2024-02-10 16:42:19
앞으로
999명이 탐색했습니다.

致命错误:所有 goroutine 都在睡觉 - 死锁!错误执行

php 편집기 Strawberry는 이 기사에서 일반적인 프로그래밍 오류를 소개합니다: 치명적인 오류: "모든 고루틴이 절전 모드입니다 - 교착 상태! 오류 실행". 이는 Go 언어에서 흔히 발생하는 실수 중 하나이며 개발자가 자주 직면하는 문제 중 하나입니다. 이 기사에서는 모든 사람이 이 문제를 더 잘 이해하고 처리할 수 있도록 이 오류의 원인과 해결 방법을 자세히 설명합니다. 당신이 초보자이든 숙련된 개발자이든 이 글을 통해 귀중한 정보와 팁을 얻을 수 있습니다. 함께 탐험해 보세요!

질문 내용

저는 동시성에 익숙하지 않아서 채널과 고루틴을 사용하여 예제를 시도해 보았습니다. 나는 생산자-소비자 모델을 원합니다. 생산자 함수는 항상 임의의 문자열을 제공하고 소비자는 이를 대문자로 만들어 수정합니다. 제한된 시간(2초) 동안 실행하고 싶습니다.

으아악

하나의 배열 요소와 일부 오류만 수신됩니다. 이 예제가 작동하려면 어떤 변경이 필요합니까?

출력:

치명적인 오류: 모든 고루틴이 잠자기 상태입니다 - 교착 상태입니다!

고루틴 1 [찬 수신]: main.main()

코루틴 6 [찬 보내기]: main.producer({0xc00004e040, 0x4, 0x0?}, 0x0?) 메인으로 제작되었습니다. 기본 종료 상태 2

해결 방법

소비자가 루프에서 실행되어야 합니다. 이는 이미 언급되었습니다.

consumer의 첫 번째 매개변수를 문자열이 아닌 chan字符串로 변경하세요. 이렇게 하면 제작자는 시간 제한이 만료될 때까지 소비자가 다른 채널에 게시할 수 있도록 이 채널에 계속 쓸 수 있습니다.

으아악

이제 go consumer() 之前的主函数中,您正在等待生产者对 c1 通道的第一个响应。不要这样做,而是将 c1를 호출하면 채널이 첫 번째 인수로 전달됩니다.

으아악

이는 생산자가 c1 채널에 계속해서 난수를 쓰고, 소비자가 2초가 될 때까지 d1 채널에 계속해서 모든 대문자 텍스트를 쓰는 것을 보여줍니다.

위 내용은 치명적인 오류: 모든 고루틴이 잠자기 상태입니다. 교착 상태입니다! 오류 실행의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!