mapex不正确纠正

This commit is contained in:
lifeiyi
2020-03-28 17:52:35 +08:00
parent d8bb581546
commit 6f21a83ec6
2 changed files with 25 additions and 5 deletions

View File

@@ -1 +0,0 @@
package has

View File

@@ -2,8 +2,9 @@ package umap
import ( import (
"fmt" "fmt"
"github.com/duanhf2012/originnet/util/hash" "github.com/duanhf2012/origin/util/hash"
"sync" "sync"
"sync/atomic"
) )
const ( const (
@@ -15,6 +16,7 @@ type MapEx struct {
m []map[interface{}]interface{} m []map[interface{}]interface{}
l []sync.RWMutex l []sync.RWMutex
hashMapNum int hashMapNum int
rangeIdx uint32
} }
func (m *MapEx) Init(hashMapNum int) { func (m *MapEx) Init(hashMapNum int) {
@@ -35,6 +37,19 @@ func NewMapEx() *MapEx {
return &mapEx return &mapEx
} }
func (m *MapEx) NextRLockRange(f func(key interface{}, value interface{})) {
i := atomic.AddUint32(&m.rangeIdx,1)%uint32(m.hashMapNum)
m.l[i].RLock()
for key, val := range m.m[i] {
f(key, val)
}
m.l[i].RUnlock()
}
func (m *MapEx) ClearMap() { func (m *MapEx) ClearMap() {
for i := 0; i < DEFAULT_SAFE_MAP_MAX_HASH_NUM; i++ { for i := 0; i < DEFAULT_SAFE_MAP_MAX_HASH_NUM; i++ {
m.l[i].Lock() m.l[i].Lock()
@@ -196,10 +211,16 @@ func (m *MapEx) LockSet(key interface{}, f func(value interface{}) interface{})
ret, ok := val[key] ret, ok := val[key]
if ok == false { if ok == false {
val[key] = f(nil) ret := f(nil)
if ret != nil {
val[key] =ret
}
} else { } else {
val[key] = f(ret) ret := f(ret)
if ret != nil {
val[key] =ret
}
} }
m.l[idx].Unlock() m.l[idx].Unlock()
} }