[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
를 사용하여 increment
및 decrement
함수에서 공유 변수 count
에 대한 안전한 접근을 보장합니다. Lock
메서드로 잠금을 건 후 작업을 수행하고, Unlock
메서드로 잠금을 해제합니다.
결론
Go 언어에서는 sync.Mutex
를 사용하여 공유 자원을 안전하게 보호할 수 있으며, 이를 통해 고루틴 간의 경쟁 상태 등으로 인한 문제를 방지할 수 있습니다. 이를 통해 안정적이고 효율적인 다중 스레드 및 고루틴 프로그래밍을 할 수 있습니다.
이러한 방식을 통해 보다 안전하고 효율적인 프로그램을 개발할 수 있습니다.
참고문헌: