Go 언어 mutex 대하여 배워보기

오늘은 Go 언어의 mutex에 대하여 작성하면서 배워보려 합니다.

package main

import (  
	"time"
    "fmt"
	"sync"
)

우선 메인 함수가 끝나는 시간을 지연시키기 위한 time과 출력을 하기 위한 fmt, 그리고 mutex를 사용하기 위한 sync를 가져옵니다.

func main() {
	var m sync.Mutex
	value := 0

Mutex를 생성해주고 테스트 값을 0으로 만들어줍니다.

	go func() {
		for i := 0; i < 3; i++ {
			m.Lock()
			value = value + 10 
			fmt.Println(value)
			m.Unlock()
		}
	}()

고루틴 익명함수를 만들어서 3번 동안 mutex를 잠금과 잠금 해제를 반복하며 값을 더해줍니다.

	go func() {
		for j := 0; j < 2; j++ {
			m.Lock()
			value = value - 10
			fmt.Println(value)
			m.Unlock()
		}
    }()

고루틴 익명함수를 만들어서 2번 동안 mutex를 잠금과 잠금 해제를 반복하며 값을 빼줍니다.

	time.Sleep(1000000000)
}

메인 함수를 잠시 늦게 끝내면서 고루틴 익명 함수에서 결과를 출력하기를 기다립니다.

잠금이 걸리면 다른 고루틴에서 잠금을 풀 수 없기 때문에 순서대로 연산되고 출력되며 메인 함수가 종료됩니다.

Written on September 24, 2018