From 0c437d3799cdb8d2f1fbbf363e1724ab66ab7ad1 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Tue, 14 Dec 2021 21:15:30 +0800 Subject: [PATCH] array_allocator.[hc] add parameter: need_lock --- src/array_allocator.c | 7 ++++--- src/array_allocator.h | 29 +++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/array_allocator.c b/src/array_allocator.c index b408ef7..bae5385 100644 --- a/src/array_allocator.c +++ b/src/array_allocator.c @@ -16,9 +16,10 @@ #include "shared_func.h" #include "array_allocator.h" -int array_allocator_init(ArrayAllocatorContext *ctx, +int array_allocator_init_ex(ArrayAllocatorContext *ctx, const char *name_prefix, const int element_size, - const int min_bits, const int max_bits) + const int min_bits, const int max_bits, + const bool need_lock) { const int reclaim_interval = 0; char name[32]; @@ -48,7 +49,7 @@ int array_allocator_init(ArrayAllocatorContext *ctx, snprintf(name, sizeof(name), "%s-array", name_prefix); return fast_allocator_init_ex(&ctx->allocator, name, regions, region - regions, 0, - 0.9999, reclaim_interval, true); + 0.9999, reclaim_interval, need_lock); } VoidArray *array_allocator_alloc(ArrayAllocatorContext *ctx, diff --git a/src/array_allocator.h b/src/array_allocator.h index 36f8764..bb620ed 100644 --- a/src/array_allocator.h +++ b/src/array_allocator.h @@ -57,9 +57,10 @@ typedef struct array_allocator_context extern "C" { #endif - int array_allocator_init(ArrayAllocatorContext *ctx, + int array_allocator_init_ex(ArrayAllocatorContext *ctx, const char *name_prefix, const int element_size, - const int min_bits, const int max_bits); + const int min_bits, const int max_bits, + const bool need_lock); VoidArray *array_allocator_alloc(ArrayAllocatorContext *ctx, const int target_count); @@ -84,8 +85,17 @@ extern "C" { int array_compare_element_id_name(const id_name_pair_t *pair1, const id_name_pair_t *pair2); +#define array_allocator_init(ctx, name_prefix, \ + element_size, min_bits, max_bits) \ + array_allocator_init_ex(ctx, name_prefix, \ + element_size, min_bits, max_bits, true) + +#define i64_array_allocator_init_ex(ctx, min_bits, max_bits, need_lock) \ + array_allocator_init_ex(ctx, "i64", sizeof(int64_t), \ + min_bits, max_bits, need_lock) + #define i64_array_allocator_init(ctx, min_bits, max_bits) \ - array_allocator_init(ctx, "i64", sizeof(int64_t), min_bits, max_bits) + i64_array_allocator_init_ex(ctx, min_bits, max_bits, true) #define i64_array_allocator_alloc(ctx, target_count) \ (I64Array *)array_allocator_alloc(ctx, target_count) @@ -98,8 +108,12 @@ extern "C" { array_allocator_free(ctx, (VoidArray *)array) +#define i32_array_allocator_init_ex(ctx, min_bits, max_bits, need_lock) \ + array_allocator_init_ex(ctx, "i32", sizeof(int32_t), \ + min_bits, max_bits, need_lock) + #define i32_array_allocator_init(ctx, min_bits, max_bits) \ - array_allocator_init(ctx, "i32", sizeof(int32_t), min_bits, max_bits) + i32_array_allocator_init_ex(ctx, min_bits, max_bits, true) #define i32_array_allocator_alloc(ctx, target_count) \ (I32Array *)array_allocator_alloc(ctx, target_count) @@ -112,9 +126,12 @@ extern "C" { array_allocator_free(ctx, (VoidArray *)array) +#define id_name_array_allocator_init_ex(ctx, min_bits, max_bits, need_lock) \ + array_allocator_init_ex(ctx, "id_name", sizeof(id_name_pair_t), \ + min_bits, max_bits, need_lock) + #define id_name_array_allocator_init(ctx, min_bits, max_bits) \ - array_allocator_init(ctx, "id_name", sizeof(id_name_pair_t), \ - min_bits, max_bits) + id_name_array_allocator_init_ex(ctx, min_bits, max_bits, true) #define id_name_array_allocator_alloc(ctx, target_count) \ (IdNameArray *)array_allocator_alloc(ctx, target_count)