[go] mutex를 이용한 공유 자원 보호

Go 언어에서는 여러 고루틴이 동시에 실행될 수 있기 때문에 공유 자원에 대한 안전한 접근을 보장하는 것이 중요합니다. sync 패키지의 Mutex를 사용하여 공유 자원을 보호할 수 있습니다.

Mutex란 무엇인가요?

Mutex는 Mutual Exclusion(상호 배타)을 나타내는 용어로, 공유 자원에 대한 접근을 동시에 단 하나의 고루틴만이 할 수 있도록 하는 기능을 제공합니다. sync 패키지에서 지원하는 Mutex는 이러한 기능을 구현하는 데 사용됩니다.

Mutex를 이용한 공유 자원 보호 예제

다음은 sync 패키지를 이용하여 Mutex를 활용한 공유 자원 보호의 간단한 예제 코드입니다.

package main

import (
	"fmt"
	"sync"
)

var (
	count int
	mutex sync.Mutex
)

func increment() {
	mutex.Lock()
	defer mutex.Unlock()
	count++
	fmt.Println("Incremented: ", count)
}

func decrement() {
	mutex.Lock()
	defer mutex.Unlock()
	count--
	fmt.Println("Decremented: ", count)
}

func main() {
	for i := 0; i < 5; i++ {
		go increment()
		go decrement()
	}
	fmt.Scanln()
}

이 예제에서는 sync.Mutex를 사용하여 incrementdecrement 함수에서 공유 변수 count에 대한 안전한 접근을 보장합니다. Lock 메서드로 잠금을 건 후 작업을 수행하고, Unlock 메서드로 잠금을 해제합니다.

결론

Go 언어에서는 sync.Mutex를 사용하여 공유 자원을 안전하게 보호할 수 있으며, 이를 통해 고루틴 간의 경쟁 상태 등으로 인한 문제를 방지할 수 있습니다. 이를 통해 안정적이고 효율적인 다중 스레드 및 고루틴 프로그래밍을 할 수 있습니다.

이러한 방식을 통해 보다 안전하고 효율적인 프로그램을 개발할 수 있습니다.

참고문헌: