[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 공식 문서