|
|
@@ -35,12 +35,21 @@ func CreateDBSFactory(cfg config.IConfig) *DBSFactory {
|
|
35
|
35
|
|
|
36
|
36
|
// ========== DBSFactory 实例方法 ==========
|
|
37
|
37
|
|
|
38
|
|
-// / CreateDBFactory 创建指定名称的数据库工厂
|
|
|
38
|
+// CreateDBFactory 创建指定名称的数据库工厂
|
|
39
|
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
|
49
|
d.mu.Lock()
|
|
41
|
50
|
defer d.mu.Unlock()
|
|
42
|
51
|
|
|
43
|
|
- // 如果已存在,直接返回
|
|
|
52
|
+ // 第二次检查(加锁后),防止并发创建
|
|
44
|
53
|
if factory := d.factories[name]; factory != nil {
|
|
45
|
54
|
return factory, nil
|
|
46
|
55
|
}
|