gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

go_below_19.go (642B)


      1 //+build !go1.9
      2 
      3 package concurrent
      4 
      5 import "sync"
      6 
      7 // Map implements a thread safe map for go version below 1.9 using mutex
      8 type Map struct {
      9 	lock sync.RWMutex
     10 	data map[interface{}]interface{}
     11 }
     12 
     13 // NewMap creates a thread safe map
     14 func NewMap() *Map {
     15 	return &Map{
     16 		data: make(map[interface{}]interface{}, 32),
     17 	}
     18 }
     19 
     20 // Load is same as sync.Map Load
     21 func (m *Map) Load(key interface{}) (elem interface{}, found bool) {
     22 	m.lock.RLock()
     23 	elem, found = m.data[key]
     24 	m.lock.RUnlock()
     25 	return
     26 }
     27 
     28 // Load is same as sync.Map Store
     29 func (m *Map) Store(key interface{}, elem interface{}) {
     30 	m.lock.Lock()
     31 	m.data[key] = elem
     32 	m.lock.Unlock()
     33 }