더북(TheBook)

5.4.2 공유 메모리

여러 스레드에서 공유 메모리를 사용할 때는 보통 스레드 하나에서만 공유 메모리에 접근하는 것을 보장하기 위해 임계 영역의 코드를 실행하기 전에 잠그고 처리를 완료한 후에는 잠금을 해제한다. Go에서도 다른 언어와 마찬가지로 잠금 기반 코드를 작성할 수 있다. Go는 sync 패키지의 뮤텍스로 잠금 기반 코드를 작성한다.

Go는 메모리를 공유하는 방식이 아니라 채널을 통해 메시지를 전달하는 방식으로 여러 고루틴 간 동기화를 권장한다. 이번 절에서는 뮤텍스를 사용하지 않고 공유 메모리를 사용하는 방법을 소개한다. 여러 고루틴의 작업을 채널로 동기화해 보자.

Go의 기본 맵은 동시성을 보장하지 않는다. 채널로 map[string]interface{} 형태의 맵을 여러 고루틴에서 공유하여 사용할 수 있게 해보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.