| //+build !go1.9 |
| |
| package concurrent |
| |
| import "sync" |
| |
| // Map implements a thread safe map for go version below 1.9 using mutex |
| type Map struct { |
| lock sync.RWMutex |
| data map[interface{}]interface{} |
| } |
| |
| // NewMap creates a thread safe map |
| func NewMap() *Map { |
| return &Map{ |
| data: make(map[interface{}]interface{}, 32), |
| } |
| } |
| |
| // Load is same as sync.Map Load |
| func (m *Map) Load(key interface{}) (elem interface{}, found bool) { |
| m.lock.RLock() |
| elem, found = m.data[key] |
| m.lock.RUnlock() |
| return |
| } |
| |
| // Load is same as sync.Map Store |
| func (m *Map) Store(key interface{}, elem interface{}) { |
| m.lock.Lock() |
| m.data[key] = elem |
| m.lock.Unlock() |
| } |