고루틴 호출과, 변수 접근 시 뮤텍스 이용하는 예제
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() // 뮤텍스 잠금 해제
}
반응형
'Go (Golang)' 카테고리의 다른 글
Go 1.24 릴리스 노트 (0) | 2025.02.13 |
---|---|
Go 언어(Golang) Makefile 사용하기 (0) | 2024.03.15 |
Go 시스템 프로그래밍 (1) | 2024.03.07 |
Go 언어 함수형 변수, 표준 입력, 좌우 공백문자 제거 (0) | 2024.02.09 |
go, 데스크탑 프로그램 만들기 (0) | 2024.02.04 |