[go] go 언어의 concurrent map 구현
Go 언어는 동시성을 지원하는 맵을 제공합니다. 이를 통해 여러 고루틴이 동시에 맵을 읽고 쓸 수 있습니다. 이 글에서는 Go 언어에서 Concurrent Map을 어떻게 구현하는지에 대해 살펴보겠습니다.
Concurrent Map의 필요성
일반적인 맵(map)은 여러 고루틴이 동시에 접근할 때 문제가 발생할 수 있습니다. 동시에 여러 고루틴이 맵을 수정하거나 읽을 때 데이터 무결성 문제가 발생할 수 있습니다. 따라서 Go 언어에서는 이러한 문제를 방지하기 위해 내장된 Concurrent Map을 제공합니다.
Concurrent Map 구현
아래는 Go 언어에서의 Concurrent Map의 간단한 구현 예시입니다.
package main
import (
"sync"
)
type ConcurrentMap struct {
m map[string]int
mux sync.RWMutex
}
func NewConcurrentMap() *ConcurrentMap {
return &ConcurrentMap{m: make(map[string]int)}
}
func (c *ConcurrentMap) Get(key string) int {
c.mux.RLock()
defer c.mux.RUnlock()
return c.m[key]
}
func (c *ConcurrentMap) Set(key string, value int) {
c.mux.Lock()
defer c.mux.Unlock()
c.m[key] = value
}
func main() {
c := NewConcurrentMap()
c.Set("one", 1)
c.Set("two", 2)
fmt.Println(c.Get("one")) // Output: 1
fmt.Println(c.Get("two")) // Output: 2
}
위의 예시에서 ConcurrentMap
구조체는 내부에 map[string]int
타입의 맵과 sync.RWMutex
를 가지고 있습니다. Get
과 Set
메서드를 통해 맵에 안전하게 동시에 접근할 수 있습니다.
결론
Go 언어는 동시성을 지원하는 맵을 사용하여 여러 고루틴 간에 안전하게 데이터를 공유할 수 있도록 지원합니다. Concurrent Map은 멀티스레드 환경에서 데이터의 무결성을 유지하며 동시에 안전하게 다룰 수 있는 중요한 자료구조입니다.
이러한 Concurrent Map을 사용하여 고루틴 간의 데이터 공유를 안전하게 처리할 수 있습니다.
참고 자료
- https://gobyexample.com/mutexes - Go 언어의 뮤텍스(Mutex)에 대한 예제와 설명 제공
위의 예제는 Go 언어의 Concurrent Map을 간단하게 구현한 것으로, 실제 환경에서는 더 복잡한 상황에 대비한 안전한 구현을 고려해야 합니다.