From f2a03c696bcf76bbaba349325abeef7be3979205 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期六, 30 一月 2021 19:05:00 +0800 Subject: [PATCH] update --- src/shm/hashtable.cpp | 85 ++++++++++++++++++++++++++++-------------- 1 files changed, 57 insertions(+), 28 deletions(-) diff --git a/src/shm/hashtable.cpp b/src/shm/hashtable.cpp index 2248ad9..cd2bd5a 100755 --- a/src/shm/hashtable.cpp +++ b/src/shm/hashtable.cpp @@ -152,20 +152,61 @@ } void hashtable_put(hashtable_t *hashtable, int key, void *value) { - - int rv; - if(( rv = svsem_wait(hashtable->mutex)) != 0) { - LoggerFactory::getLogger()->error(errno, "hashtable_put\n"); - } - - _hashtable_put(hashtable, key, value); - - if(( rv = svsem_post(hashtable->mutex)) != 0) { - LoggerFactory::getLogger()->error(errno, "hashtable_put\n"); - } + _hashtable_put(hashtable, key, value); } +// bool hashtable_put(hashtable_t *hashtable, int key, void *value, bool overwrite) { +// int rv; +// if(( rv = svsem_wait(hashtable->mutex)) != 0) { +// LoggerFactory::getLogger()->error(errno, "hashtable_put\n"); +// } +// if(overwrite) { +// _hashtable_put(hashtable, key, value); +// goto suc; +// } +// void * val = _hashtable_get(hashtable, key); +// // val = 1鏄痑llockey鐨勬儏鍐� +// if(val != NULL && val != (void *)1) +// goto fail; + +// _hashtable_put(hashtable, key, value); + +// suc: +// if(( rv = svsem_post(hashtable->mutex)) != 0) { +// LoggerFactory::getLogger()->error(errno, "hashtable_put\n"); +// } +// return true; + +// fail: +// if(( rv = svsem_post(hashtable->mutex)) != 0) { +// LoggerFactory::getLogger()->error(errno, "hashtable_put\n"); +// } +// return false; +// } + + + +int hashtable_alloc_key(hashtable_t *hashtable) { + int rv; + int key = START_KEY; + rv = svsem_wait(hashtable->mutex); + if(rv != 0) { + LoggerFactory::getLogger()->error(errno, "hashtable_alloc_key\n"); + } + + while(_hashtable_get(hashtable, key) != NULL) { + key++; + } + // 鍗犵敤key + _hashtable_put(hashtable, key, (void *)1); + + rv = svsem_post(hashtable->mutex); + if(rv != 0) { + LoggerFactory::getLogger()->error(errno, "hashtable_alloc_key\n"); + } + return key; +} static inline void _hashtable_foreach(hashtable_t *hashtable, std::function<void(int, void *)> cb) { tailq_entry_t *item; @@ -207,25 +248,13 @@ } -int hashtable_alloc_key(hashtable_t *hashtable) { - int rv; - int key = START_KEY; - rv = svsem_wait(hashtable->mutex); - if(rv != 0) { - LoggerFactory::getLogger()->error(errno, "hashtable_alloc_key\n"); - } - while(_hashtable_get(hashtable, key) != NULL) { - key++; - } - // 鍗犵敤key - _hashtable_put(hashtable, key, (void *)1); +int hashtable_lock(hashtable_t *hashtable) { + return svsem_wait(hashtable->mutex); +} - rv = svsem_post(hashtable->mutex); - if(rv != 0) { - LoggerFactory::getLogger()->error(errno, "hashtable_alloc_key\n"); - } - return key; +int hashtable_unlock(hashtable_t *hashtable) { + return svsem_post(hashtable->mutex); } -- Gitblit v1.8.0