"홀수와 짝수를 번갈아 인쇄하는 고루틴이 교착 상태에 빠졌습니다."는 동시 프로그래밍에서 흔히 발생하는 문제입니다. 동시 작업에 고루틴을 사용할 때 올바른 동기화 메커니즘이 없으면 쉽게 교착 상태가 발생할 수 있습니다. 교착 상태는 둘 이상의 프로세스(또는 고루틴)가 서로 리소스를 해제하기를 기다리고 있기 때문에 계속 실행할 수 없는 상태입니다. 이 기사에서는 이 문제의 원인을 소개하고 개발자가 동시 프로그래밍의 교착 상태 문제를 더 잘 이해하는 데 도움이 되는 솔루션을 제공합니다.
저는 현재 golang을 배우고 있습니다. golang 채널이 어떻게 작동하는지 확인하고 싶습니다. 저는 두 개의 고루틴이 홀수와 짝수를 교대로 인쇄하는 프로그램을 만들었습니다. 프로그램이 올바르게 인쇄하더라도 마지막에는 여전히 교착 상태 오류가 표시됩니다. 오류 메시지에는 이 문제의 원인이 명확하지 않습니다.
으아아아[편집] 답장을 보내주셔서 감사합니다. 문제를 해결하기 위해 다음 코드를 작성했습니다.
func main() { even := make(chan bool) odd := make(chan bool) go func() { defer close(odd) for i := 0; i <= 10; i += 2 { <-even print("even ====>") println(i) odd <- true } }() var wait sync.waitgroup wait.add(1) go func() { for i := 1; i <= 10; i += 2 { _, ok := <-odd if !ok { wait.done() return } print("odd ====>") println(i) even <- true } }() even <- true wait.wait() }
이 문제는 다음과 같은 방법으로 해결할 수 있습니다
select
ing 写入 even
(28행) 위 내용은 홀수와 짝수를 번갈아 인쇄하는 고루틴이 교착 상태에 빠졌습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!