[go] sync 패키지의 역할
고루틴 간 데이터 공유 및 동기화는 여러 분야에서 중요한 문제입니다. sync 패키지는 고루틴 간 동시성을 관리하고 동기화하기 위한 도구를 제공합니다.
Mutex
sync.Mutex는 가장 기본적인 락(lock) 도구로, 공유 데이터에 대한 접근을 동기화합니다. 아래는 sync.Mutex를 사용한 예제 코드입니다.
package main
import (
"fmt"
"sync"
)
var mu sync.Mutex
var sharedData int
func main() {
mu.Lock()
sharedData = 10
mu.Unlock()
fmt.Println(sharedData)
}
위의 코드에서 sync.Mutex를 사용하여 sharedData에 대한 접근을 보호하고 있습니다.
WaitGroup
sync.WaitGroup은 고루틴의 실행을 동기화하기 위해 사용됩니다. 아래는 sync.WaitGroup을 사용한 예제 코드입니다.
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
fmt.Println("고루틴 동작 중")
}()
wg.Wait()
fmt.Println("고루틴 종료")
}
위의 코드에서 sync.WaitGroup을 사용하여 고루틴의 동작을 동기화하고 있습니다.
sync 패키지를 사용하여 고루틴 간 동기화를 적절히 관리하여 안정성과 효율성을 높일 수 있습니다.
참고문헌: Go 공식 문서