golang에서 교착상태를 처리하는 방법

(*-*)浩
풀어 주다: 2019-12-30 15:37:37
원래의
2814명이 탐색했습니다.

golang에서 교착상태를 처리하는 방법

Deadlock

Deadlock은 두 개 이상의 코루틴이 실행되는 과정을 말합니다. 그 과정에서, 자원 경쟁이나 서로 소통에 따른 차단 현상이 발생하면 외부의 힘이 없으면 앞으로 나아갈 수 없게 된다. (추천 학습: go)

Common deadlock

시나리오 1: One The 채널 go 프로세스에서 읽고 기록됩니다

func main() {
	c:=make(chan int)
	c<-88
	<-c
}
로그인 후 복사

시나리오 2: go 프로세스가 열리기 전에 채널 사용

func main() {
	c:=make(chan int)
	c<-88
	go func() {
		<-c
	}()
}
로그인 후 복사

시나리오 3: 채널 1이 채널 2를 호출하고, 채널 2가 채널 1을 호출합니다

func main() {
	c1,c2:=make(chan int),make(chan int)
	go func() {
		for  {
			select{
				case <-c1:
					c2<-10
			}
		}
	}()
	for  {
		select{
		case <-c2:
			c1<-10
		}
	}	
}
로그인 후 복사

교착 상태가 발생하는 상황은 많지만 모두 리소스와 데이터를 위한 경쟁입니다. 의사소통 원인.

교착상태에 대한 해결책은 잠금을 추가하는 것입니다.

위 내용은 golang에서 교착상태를 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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