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 중국어 웹사이트의 기타 관련 기사를 참조하세요!