github.com/nibnait/go-learn@v0.0.0-20220227013611-dfa47ea6d2da/src/test/chapter/ch9/02_maps/rw_map.go (about)

     1  package maps
     2  
     3  import "sync"
     4  
     5  type RWLockMap struct {
     6  	m    map[interface{}]interface{}
     7  	lock sync.RWMutex
     8  }
     9  
    10  func (m *RWLockMap) Get(key interface{}) (interface{}, bool) {
    11  	m.lock.RLock()
    12  	v, ok := m.m[key]
    13  	m.lock.RUnlock()
    14  	return v, ok
    15  }
    16  
    17  func (m *RWLockMap) Set(key interface{}, value interface{}) {
    18  	m.lock.Lock()
    19  	m.m[key] = value
    20  	m.lock.Unlock()
    21  }
    22  
    23  func (m *RWLockMap) Del(key interface{}) {
    24  	m.lock.Lock()
    25  	delete(m.m, key)
    26  	m.lock.Unlock()
    27  }
    28  
    29  func CreateRWLockMap() *RWLockMap {
    30  	m := make(map[interface{}]interface{}, 0)
    31  	return &RWLockMap{m: m}
    32  }