在线exprid2region_id命中大量相同的district,导致锁冲突,将group中的互斥锁改为读写锁。
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user