From 80d620de70f9f32aee978aa88ff8f1f7ec0d37c5 Mon Sep 17 00:00:00 2001 From: zhengchao Date: Wed, 2 Aug 2017 18:30:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E7=BA=BFexprid2region=5Fid=E5=91=BD?= =?UTF-8?q?=E4=B8=AD=E5=A4=A7=E9=87=8F=E7=9B=B8=E5=90=8C=E7=9A=84district?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E8=87=B4=E9=94=81=E5=86=B2=E7=AA=81=EF=BC=8C?= =?UTF-8?q?=E5=B0=86group=E4=B8=AD=E7=9A=84=E4=BA=92=E6=96=A5=E9=94=81?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E8=AF=BB=E5=86=99=E9=94=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entry/Maat_api.cpp | 4 ++-- src/entry/Maat_rule.cpp | 18 +++++++++--------- src/entry/Maat_rule_internal.h | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/entry/Maat_api.cpp b/src/entry/Maat_api.cpp index 0e10c92..a6dc98c 100644 --- a/src/entry/Maat_api.cpp +++ b/src/entry/Maat_api.cpp @@ -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;iregion_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) diff --git a/src/entry/Maat_rule.cpp b/src/entry/Maat_rule.cpp index 3caecac..dd9afb8 100644 --- a/src/entry/Maat_rule.cpp +++ b/src/entry/Maat_rule.cpp @@ -28,7 +28,7 @@ #include "mesa_fuzzy.h" #include "great_index_engine.h" -int MAAT_FRAME_VERSION_1_9_20170626=1; +int MAAT_FRAME_VERSION_1_9_20170802=1; const char *maat_module="MAAT Frame"; const char* CHARSET_STRING[]={"NONE","gbk","big5","unicode","utf8","bin", @@ -630,7 +630,7 @@ struct _Maat_group_rule_t* create_group_rule(int group_id) group->ref_cnt=0; group->region_rules=dynamic_array_create(1,8); group->compile_shortcut=NULL; - pthread_mutex_init(&(group->mutex), NULL); + pthread_rwlock_init(&(group->rwlock), NULL); return group; } void destroy_group_rule(struct _Maat_group_rule_t* group) @@ -647,7 +647,7 @@ void destroy_group_rule(struct _Maat_group_rule_t* group) group->region_rules=NULL; group->ref_cnt=0; group->group_id=-1; - pthread_mutex_destroy(&(group->mutex)); + pthread_rwlock_destroy(&(group->rwlock)); free(group); } @@ -1299,31 +1299,31 @@ struct _Maat_group_rule_t* add_region_to_group(struct _Maat_group_rule_t* group, region_rule->expr_id=expr_id; region_rule->district_id=district_id; region_rule->region_type=region_type; - pthread_mutex_lock(&(group->mutex)); + pthread_rwlock_wrlock(&(group->rwlock)); dynamic_array_write(group->region_rules,group->region_boundary,region_rule); group->region_cnt++; group->region_boundary++; - pthread_mutex_unlock(&(group->mutex)); + pthread_rwlock_unlock(&(group->rwlock)); return group; } void cancel_last_region_from_group(struct _Maat_group_rule_t* group,int region_id,int expr_id) { struct _Maat_region_rule_t* region_rule=NULL; - pthread_mutex_lock(&(group->mutex)); + pthread_rwlock_wrlock(&(group->rwlock)); group->region_boundary--; region_rule=(struct _Maat_region_rule_t*)dynamic_array_read(group->region_rules,group->region_boundary); assert(region_rule->expr_id==expr_id&®ion_rule->region_id==region_id); free(region_rule); dynamic_array_write(group->region_rules,group->region_boundary,NULL); group->region_cnt--; - pthread_mutex_unlock(&(group->mutex)); + pthread_rwlock_unlock(&(group->rwlock)); return; } unsigned int del_region_from_group(struct _Maat_group_rule_t* group,int region_id,unsigned int *output_expr_id,int output_size) { int i=0,j=0; struct _Maat_region_rule_t* region_rule=NULL; - pthread_mutex_lock(&(group->mutex)); + pthread_rwlock_wrlock(&(group->rwlock)); for(i=0;iregion_boundary;i++) { region_rule=(struct _Maat_region_rule_t*)dynamic_array_read(group->region_rules, i); @@ -1344,7 +1344,7 @@ unsigned int del_region_from_group(struct _Maat_group_rule_t* group,int region_i group->region_cnt--; } } - pthread_mutex_unlock(&(group->mutex)); + pthread_rwlock_unlock(&(group->rwlock)); return j; } diff --git a/src/entry/Maat_rule_internal.h b/src/entry/Maat_rule_internal.h index d2e3e22..272a68a 100644 --- a/src/entry/Maat_rule_internal.h +++ b/src/entry/Maat_rule_internal.h @@ -189,7 +189,7 @@ struct _Maat_group_rule_t int ref_cnt; dynamic_array_t *region_rules; void* compile_shortcut; - pthread_mutex_t mutex; + pthread_mutex_t rwlock; }; struct _Maat_compile_rule_t {