From 14c345b38d57fd814f217eb8465963a08ca79f7e Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期五, 05 二月 2021 17:41:09 +0800 Subject: [PATCH] update --- src/shm/shm_mm_wrapper.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-) diff --git a/src/shm/shm_mm_wrapper.cpp b/src/shm/shm_mm_wrapper.cpp index d62602f..92350c8 100644 --- a/src/shm/shm_mm_wrapper.cpp +++ b/src/shm/shm_mm_wrapper.cpp @@ -1,6 +1,8 @@ #include "shm_mm_wrapper.h" #include "mem_pool.h" #include "hashtable.h" +#include "lock_free_queue.h" +#include "shm_socket.h" void shm_mm_wrapper_init(int size) { mem_pool_init(size); @@ -13,3 +15,54 @@ int shm_mm_wrapper_alloc_key() { return mm_alloc_key(); } + + + +//鍒犻櫎鍖呭惈鍦╧eys鍐呯殑queue +int shm_mm_wrapper_remove_keys(int keys[], int length) { + hashtable_t *hashtable = mm_get_hashtable(); + LockFreeQueue<shm_packet_t> *mqueue; + int count = 0; + for(int i = 0; i< length; i++) { + // 閿�姣佸叡浜唴瀛樼殑queue + mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, keys[i]); + if(mqueue == NULL) { + continue; + } + delete mqueue; + hashtable_remove(hashtable, keys[i]); + count++; + } + return count; +} + + +// 鍒犻櫎涓嶅湪keys鍐呯殑queue +int shm_mm_wrapper_remove_keys_exclude(int keys[], int length) { + hashtable_t *hashtable = mm_get_hashtable(); + std::set<int> *keyset = hashtable_keyset(hashtable); + std::set<int>::iterator keyItr; + LockFreeQueue<shm_packet_t> *mqueue; + bool found; + int count = 0; + for (keyItr = keyset->begin(); keyItr != keyset->end(); keyItr++) { + found = false; + for (size_t i = 0; i < length; i++) { + if (*keyItr == keys[i]) { + found = true; + break; + } + } + // 100鍐呯殑鏄痓us鍐呴儴鑷繁鐢ㄧ殑 + if (!found && *keyItr > 100) { + // 閿�姣佸叡浜唴瀛樼殑queue + mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, *keyItr); + + delete mqueue; + hashtable_remove(hashtable, *keyItr); + count++; + } + } + delete keyset; + return count; +} -- Gitblit v1.8.0