From 6351ababead17e120b146a4b3f37c4e49ca64268 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 17 九月 2019 10:53:29 +0800
Subject: [PATCH] 给定时器加锁
---
ruleserver/ruleToformula.go | 12 +++++++++++-
ruleserver/timeTicker.go | 2 ++
2 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 63b1778..ae1e45a 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -6,6 +6,7 @@
"sort"
"strconv"
"strings"
+ "sync"
"time"
"basic.com/pubsub/protomsg.git"
@@ -110,6 +111,8 @@
Result string // 宸插寘鍚簡鍓嶇疆杩炴帴绗�
Sort int32
}
+
+var rw sync.RWMutex // 璇诲啓閿�
// 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas 褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas)
func Judge(args *SdkDatas, message *protomsg.SdkMessage) {
@@ -420,6 +423,7 @@
logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText)
var flag bool = true
var timeEle = TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId}
+ rw.Lock()
for k, timeEle1 := range TimeEleList {
if k == groupRule.GroupId {
flag = false // 宸茬粡鏈変簡杩欎釜瀹氭椂鍣ㄥ氨缃负false 涓嶅啀鏂板
@@ -449,7 +453,7 @@
}
}
}
- logger.Info("")
+ rw.Unlock()
// 寰�鏁扮粍閲岃祴鍊�
isOk,labelTypes := RunRule(args, groupRule, taskId, message, label)
if isOk {
@@ -501,6 +505,7 @@
result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
if result.(bool) {
logger.Info("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ")
+ rw.RLock()
if TimeEleList[groupRule.GroupId] != nil { // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈�
// 鎶婃暟缁勯噷缂撳瓨鐨勬暟鎹彇鍑烘潵涓�璧锋姤璀�
label.LinkCache = []ResultMsg{}
@@ -519,6 +524,7 @@
}
}
}
+ rw.RUnlock()
}
}
} else {
@@ -549,12 +555,14 @@
// va.Result = strconv.FormatBool(isOk)
// }
//}
+ rw.Lock()
for k, _ := range TimeEleList {
if k == groupRule.GroupId {
delete(TimeEleList, k)
logger.Debug("鍥犱负瀹氭椂鍣ㄧ殑涓�甯ф暟鎹粨鏋滀负false锛屽共鎺夊畾鏃跺櫒")
}
}
+ rw.Unlock()
// 鍥犱负鏈抚鏁版嵁涓嶇鍚堣鍒欙紝鎵�浠ヤ篃涓嶇敤缁熻缁撴灉鏁扮粍閲岀殑涓滆タ
}
@@ -701,6 +709,7 @@
if rule.SdkArgAlias == "duration" { //
logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欐潯瑙勫垯鐨勫畾鏃跺櫒,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
+ rw.Lock()
var flag bool = true
for k, _ := range TimeEleList {
if k == groupId+"+"+rule.Id {
@@ -716,6 +725,7 @@
TimeEleList[groupId+"+"+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互褰撳墠鎸佺画鏃堕棿灏忚鍒檌d涓洪敭
logger.Info("鍒涘缓浜嗚鏁板櫒")
}
+ rw.Unlock()
}
}
}
diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go
index 4a4537f..0e547ae 100644
--- a/ruleserver/timeTicker.go
+++ b/ruleserver/timeTicker.go
@@ -71,6 +71,7 @@
var flagTime string //
// 鍒ゆ柇鏈夋棤姝よ鍒欑粍鐨勫畾鏃跺櫒
flag := false
+ rw.Lock()
for k, _ := range TimeEleList {
//logger.Debug("-----------------鐪嬬湅杩欎釜key鍜実roupId", k, groupId)
if strings.Contains(k, groupId) && k != groupId{
@@ -132,6 +133,7 @@
flagTime = "00"
}
}
+ rw.Unlock()
return flagTime
}
--
Gitblit v1.8.0