| | |
| | | } |
| | | |
| | | template <typename ELEM_T> SHMQueue<ELEM_T>::~SHMQueue() { |
| | | if(queue == NULL) { |
| | | // queue已经销毁 |
| | | return; |
| | | } |
| | | |
| | | SemUtil::dec(queue->mutex); |
| | | queue->reference--; |
| | | // LoggerFactory::getLogger().debug("SHMQueue destructor reference===%d", |
| | | if (queue->reference.load() == 0) { |
| | | delete queue; |
| | | hashtable_t *hashtable = mm_get_hashtable(); |
| | | hashtable_remove(hashtable, KEY); |
| | | // printf("SHMQueue destructor delete queue\n"); |
| | | delete queue; |
| | | queue = NULL; |
| | | hashtable_t *hashtable = mm_get_hashtable(); |
| | | hashtable_remove(hashtable, KEY); |
| | | // 此时queue已经销毁,无需 SemUtil::inc(queue->mutex) |
| | | // printf("SHMQueue destructor delete queue\n"); |
| | | } else { |
| | | SemUtil::inc(queue->mutex); |
| | | SemUtil::inc(queue->mutex); |
| | | } |
| | | |
| | | } |
| | | |
| | | template <typename ELEM_T> void SHMQueue<ELEM_T>::force_destroy() { |
| | | if(queue == NULL) { |
| | | // queue已经销毁 |
| | | return; |
| | | } |
| | | |
| | | SemUtil::dec(queue->mutex); |
| | | delete queue; |
| | | queue = NULL; |
| | | hashtable_t *hashtable = mm_get_hashtable(); |
| | | hashtable_remove(hashtable, KEY); |
| | | SemUtil::inc(queue->mutex); |
| | | // 此时queue已经销毁,无需 SemUtil::inc(queue->mutex) |
| | | } |
| | | |
| | | template <typename ELEM_T> inline uint32_t SHMQueue<ELEM_T>::size() { |