From b5687ecf98b999ad535e242c5d25cc5be328af77 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期五, 13 九月 2024 11:17:00 +0800 Subject: [PATCH] add rlock in shardmap walk --- cache/shardmap/shardmap.go | 18 +++++++++--------- 1 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cache/shardmap/shardmap.go b/cache/shardmap/shardmap.go index 96aaded..4e3ec24 100644 --- a/cache/shardmap/shardmap.go +++ b/cache/shardmap/shardmap.go @@ -93,25 +93,27 @@ func (s *ShardMap) Walk(wf wfOp, sourceFea []float32, baseScore float32) (targets []*protomsg.SdkCompareEach) { var wg sync.WaitGroup var lock sync.Mutex - //fmt.Printf("Walk shards len %d\n", len(s.shards)) for _, si := range s.shards { - var tempsi shardItem = *si + var tempsi *shardItem = si // 淇濇寔瀵瑰師濮� shardItem 鐨勬寚閽堝紩鐢� + // 璺宠繃绌哄垎鐗� if len(tempsi.data) == 0 { continue } wg.Add(1) - go func(st *shardItem, fn wfOp, srcFeat []float32, baseSec float32) { defer wg.Done() + st.RLock() // 閿佸畾璇诲彇 + defer st.RUnlock() // 纭繚璇诲彇瀹屾瘯鍚庤В閿� + for _, feature := range st.data { + // 璇诲彇鎿嶄綔鍦ㄩ攣鍐呰繘琛岋紝闃叉骞跺彂鍐茬獊 if item, ok := feature.(*db.FeatureCacheBase); ok { - score := float32(0) - score = fn(srcFeat, item.FaceFeature) + score := fn(srcFeat, item.FaceFeature) if score > 0 && score >= baseScore { - lock.Lock() + lock.Lock() // 淇濇姢鐩爣鍒囩墖鐨勫啓鍏� targets = append(targets, &protomsg.SdkCompareEach{ Id: item.Id, CompareScore: score, @@ -121,13 +123,11 @@ } } } - - }(&tempsi, wf, sourceFea, baseScore) + }(tempsi, wf, sourceFea, baseScore) } wg.Wait() return targets - } // print all -- Gitblit v1.8.0