在线exprid2region_id命中大量相同的district,导致锁冲突,将group中的互斥锁改为读写锁。

This commit is contained in:
zhengchao
2017-08-02 18:30:16 +08:00
parent 45cf4a61f2
commit 80d620de70
3 changed files with 12 additions and 12 deletions

View File

@@ -188,7 +188,7 @@ int exprid2region_id(struct _Maat_group_rule_t* group_rule,int expr_id,int* dist
int i=0,region_id=-1;
struct _Maat_region_rule_t* region_rule=NULL;
assert(group_rule->group_id>=0);
pthread_mutex_lock(&(group_rule->mutex));
pthread_rwlock_rdlock(&(group_rule->rwlock));
for(i=0;i<group_rule->region_boundary;i++)
{
region_rule=(struct _Maat_region_rule_t*)dynamic_array_read(group_rule->region_rules, i);
@@ -202,7 +202,7 @@ int exprid2region_id(struct _Maat_group_rule_t* group_rule,int expr_id,int* dist
*district_id=region_rule->district_id;
}
}
pthread_mutex_unlock(&(group_rule->mutex));
pthread_rwlock_unlock(&(group_rule->rwlock));
return region_id;
}
int match_district(struct _OUTER_scan_status_t *_mid,scan_result_t *region_hit,int region_hit_num)