Преглед изворни кода

调用mcp-测试通过-搜索店铺档案表

qdy пре 1 месец
родитељ
комит
5ee4dc8054
1 измењених фајлова са 11 додато и 2 уклоњено
  1. 11
    2
      factory/database/dbs_factory.go

+ 11
- 2
factory/database/dbs_factory.go Прегледај датотеку

35
 
35
 
36
 // ========== DBSFactory 实例方法 ==========
36
 // ========== DBSFactory 实例方法 ==========
37
 
37
 
38
-// / CreateDBFactory 创建指定名称的数据库工厂
38
+// CreateDBFactory 创建指定名称的数据库工厂
39
 func (d *DBSFactory) CreateDBFactory(name string) (*DBFactory, error) {
39
 func (d *DBSFactory) CreateDBFactory(name string) (*DBFactory, error) {
40
+	// 第一次检查(不加锁),如果存在直接返回
41
+	d.mu.RLock()
42
+	if factory := d.factories[name]; factory != nil {
43
+		d.mu.RUnlock()
44
+		return factory, nil
45
+	}
46
+	d.mu.RUnlock()
47
+
48
+	// 加锁进行创建
40
 	d.mu.Lock()
49
 	d.mu.Lock()
41
 	defer d.mu.Unlock()
50
 	defer d.mu.Unlock()
42
 
51
 
43
-	// 如果已存在,直接返回
52
+	// 第二次检查(加锁后),防止并发创建
44
 	if factory := d.factories[name]; factory != nil {
53
 	if factory := d.factories[name]; factory != nil {
45
 		return factory, nil
54
 		return factory, nil
46
 	}
55
 	}

Loading…
Откажи
Сачувај