Jelajahi Sumber

Use RWMutex in prepared statement cache

Ian Lozinski 9 tahun lalu
induk
melakukan
862ce95504
1 mengubah file dengan 4 tambahan dan 4 penghapusan
  1. 4 4
      prepared_cache.go

+ 4 - 4
prepared_cache.go

@@ -9,7 +9,7 @@ const defaultMaxPreparedStmts = 1000
 
 // preparedLRU is the prepared statement cache
 type preparedLRU struct {
-	mu  sync.Mutex
+	mu  sync.RWMutex
 	lru *lru.Cache
 }
 
@@ -47,10 +47,10 @@ func (p *preparedLRU) remove(key string) bool {
 }
 
 func (p *preparedLRU) execIfMissing(key string, fn func(lru *lru.Cache) *inflightPrepare) (*inflightPrepare, bool) {
-	p.mu.Lock()
-	defer p.mu.Unlock()
-
+	p.mu.RLock()
 	val, ok := p.lru.Get(key)
+	p.mu.RUnlock()
+
 	if ok {
 		return val.(*inflightPrepare), true
 	}