2014-03-27 3 views
5

동기화 세계에서 Barrier은 다른 스레드가 특정 지점에 도달 할 때까지 스레드가 대기 할 수있게합니다. 카운팅 세마포어는 n 개의 스레드가 공유 자원에 액세스 할 수있게합니다.sync.WaitGroup은 Barrier 구현입니까?

이렇게부터 sync.WaitGroup은 방어용 세마포어 (그러나 공유 자원의 개념이 없음) 사이의 경계입니다. 이것이 정확한 정신 모델입니까?

답변

5

많은 것들이 장벽으로 사용될 수 있습니다. 이동 중에 가장 관용적 인 장벽은 채널입니다. 기다리고있는 goroutine이 둘 이상인 경우 대기 행렬이 유용 할 수 있습니다.

대기 그룹은 스레드 (goroutines)를 처리하는 장벽으로 사용될 수 있지만 모든 작업을 수행 할 수있는 것은 아닙니다. 당신은 N 개의 작업을 M 개의 goroutine으로 보낸 다음, 완료된 goroutines 대신 waitgroup track 작업을 가질 수 있습니다.

대기 그룹의 목적은 예상 한 이벤트 수를 기다리는 것입니다. goroutines가 코드의 특정 위치에 도착했거나 작업이 완료되었거나 방금 느낌이 들었 기 때문일 수 있습니다. 만약 당신이 그것의 정신적 모델을 장벽으로 가지고 있다면, 그것의 사용을 제한 할 것입니다.

관련 문제