> 백엔드 개발 > Golang > WaitGroup이 있음에도 불구하고 고루틴이 중단된 것 같습니다.

WaitGroup이 있음에도 불구하고 고루틴이 중단된 것 같습니다.

PHPz
풀어 주다: 2024-02-06 09:06:07
앞으로
967명이 탐색했습니다.

尽管存在 WaitGroup,Goroutines 似乎还是被中断了

질문 내용

대기 그룹이 있음에도 불구하고 고루틴이 끝나지 않는 문제가 있습니다. 첨부된 코드에서 힙 순열 알고리즘의 구현을 볼 수 있습니다. 속도를 높이고 싶었기 때문에 가능한 첫 번째 숫자 각각에 대해 고루틴을 만들어서 각 고루틴의 순열을 (n-1)!。总的来说,我应该仍然有 n! 排列 (n*(n-1)!= n!),但我的主例程似乎在子例程完成之前退出。然后我尝试跟踪执行的排列。与我的信念相反,执行的排列数量不是恒定的,但在 n! 下总是有点(对于低 n)或非常多(对于大 n)으로 줄였습니다.

예를 들어 n=4 每次的排列都是 24,即 4! ,这样所有的 goroutine 就结束了。如果我有一个更高的数字,例如 n=8,我会得到一个大约 13500 的值,而不是预期的 40000 = 8!.

이런 행동은 어디서 오는 걸까요? 메인 프로그램이 종료되기 전에 모든 고루틴이 완료되었는지 확인하는 방법은 무엇입니까?

으아아아

(동일한 동작은 https://go.dev/play/에서 쉽게 달성할 수 있으므로 재현성이 매우 높습니다.)


정답


귀하의 코드에서 고루틴은 permutations 变量。当您增加 n 값으로 동시에 액세스합니다. , 작업량이 증가하여 예상치 못한 결과를 초래하는 문제가 될 수 있습니다.

mutex,它将确保当时只有一个goroutine可以访问permutations를 사용할 수 있습니다.

으아아아

위 내용은 WaitGroup이 있음에도 불구하고 고루틴이 중단된 것 같습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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