From 686d88cabcb8c4ee90a159eb81f3fbcb56d8aeba Mon Sep 17 00:00:00 2001 From: duanhf2012 Date: Fri, 13 Mar 2020 14:48:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=BC=95=E6=93=8E=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sysservice/tcpsocketpbservice.go | 4 +++- util/mapex.go | 28 ++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/sysservice/tcpsocketpbservice.go b/sysservice/tcpsocketpbservice.go index becc3aa..4a3f8d0 100644 --- a/sysservice/tcpsocketpbservice.go +++ b/sysservice/tcpsocketpbservice.go @@ -30,7 +30,9 @@ type MsgProcessor struct { } - +func (slf *MsgProcessor) InitProcessor(){ + slf.mapMsg = make(map[uint16]MessageInfo) +} func (slf *MsgProcessor) RegMessage(msgtype uint16,msg proto.Message,handle MessageHandler){ var info MessageInfo diff --git a/util/mapex.go b/util/mapex.go index f3402f0..8c8bfc6 100644 --- a/util/mapex.go +++ b/util/mapex.go @@ -2,9 +2,9 @@ package util import ( "fmt" - "sync" - "github.com/duanhf2012/origin/util/hash" + "sync" + "sync/atomic" ) const ( @@ -16,6 +16,7 @@ type MapEx struct { m []map[interface{}]interface{} l []sync.RWMutex hashMapNum int + rangeIdx uint32 } func (m *MapEx) Init(hashMapNum int) { @@ -36,6 +37,19 @@ func NewMapEx() *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() { for i := 0; i < DEFAULT_SAFE_MAP_MAX_HASH_NUM; i++ { m.l[i].Lock() @@ -197,9 +211,15 @@ func (m *MapEx) LockSet(key interface{}, f func(value interface{}) interface{}) ret, ok := val[key] if ok == false { - val[key] = f(nil) + ret := f(nil) + if ret != nil { + val[key] =ret + } } else { - val[key] = f(ret) + ret := f(ret) + if ret != nil { + val[key] =ret + } } m.l[idx].Unlock()