Go (Golang)
고루틴 호출과, 변수 접근 시 뮤텍스 이용하는 예제
수알치
2024. 3. 12. 16:57
고루틴 호출과, 변수 접근 시 뮤텍스 이용하는 예제
package main
import (
"fmt"
"sync"
)
// 전역변수 선언
var (
c = make(chan int)
a string
wg sync.WaitGroup
mux sync.Mutex
)
func myFunc() {
defer wg.Done() // 고루틴이 종료될 때 WaitGroup 감소(0은 종료)
mux.Lock() // a 변수 값 변경 전에 뮤텍스 잠금
a = "hello, world"
mux.Unlock() // 뮤텍스 잠금 해제
<-c // 채널에서 값 가져와서 버림, 채널이 비었으면 대기 (저장하려면, data := <-c)
}
func main() {
wg.Add(1) // 고루틴 1개 대기
go myFunc() // 함수를 고루틴 실행
c <- 0 // 채널에 값 추가 (고루틴이 실행됨)
wg.Wait() // 모든 고루틴 종료 대기
mux.Lock() // 안전하게 a 변수에 접근하려고 뮤텍스 잠금
fmt.Println(a)
mux.Unlock() // 뮤텍스 잠금 해제
}
반응형