Go 언어에서 두 개의 fmt.Println() 인쇄 기능을 사용하면 교착 상태가 발생합니까? 이것은 일반적인 질문입니다. 대답해 보겠습니다. 먼저 교착상태(Deadlock)의 개념을 이해해야 합니다. 교착 상태는 두 개 이상의 프로세스가 서로 완료될 때까지 기다리면서 프로그램이 계속 실행될 수 없게 되는 상황입니다. Go 언어에서는 두 루틴에서 동시에 fmt.Println() 인쇄 기능을 사용하면 표준 출력이 스레드로부터 안전하므로 교착 상태가 발생하지 않습니다. 따라서 교착 상태 문제에 대한 걱정 없이 go 루틴에서 여러 fmt.Println() 함수를 안전하게 사용할 수 있습니다.
바둑을 배우면서 운동장에서 실험도 하고 있어요. 매우 간단한 코드가 있습니다. Go 루틴에서 구조체와 슬라이스를 함께 사용하려고 합니다. 이것이 제가 프로덕션에서 사용할 수 있을지 확실하지 않지만 약간 벗어난 것 같아서 다음과 같습니다.
으아악대기그룹이라는 말을 들어본 적은 있지만 아직은 잘 모르겠어요! 그러니 나에게 친절하게 대해주세요 :d, goroutine에서 시간을 내어
routinemsg
上只有一个发送操作,但您有 2 个接收操作:一个在启动的 goroutine 中,另一个在 main
해주셔서 감사합니다. 전송된 값은 수신자가 한 번만 받을 수 있습니다.
시작된 고루틴이 routinemsg
接收,那么就会出现死锁:main
부터 먼저 수신되면 영원히 차단됩니다.
If main
goroutine 首先接收,那么启动的 goroutine 将永远阻塞(尝试从中接收),因此它永远无法在 routinemsg2
上发送任何内容,因此 main
中从 routinemsg2
수신도 영원히 차단됩니다. 다시 교착 상태가 됩니다.
삭제 main()
中的 fmt.println(<-routinemsg)
行,然后从 routinemsg2
的最终接收可以(最终)继续并打印包含 p1
、p2
和 phpcnc 的切片phpcnp3:
go 놀이터에서 사용해 보세요.
위 내용은 go 루틴에서 두 개의 fmt.println을 사용할 때 교착 상태가 발생합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!