squeue/include/array_lock_free_queue.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
squeue/include/linked_lock_free_queue.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
squeue/include/lock_free_queue.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
squeue/include/queue_factory.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
squeue/include/squeue1.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
squeue/logger_factory.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
squeue/mm.c | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
test/multiple_queue_consumer | 补丁 | 查看 | 原始文档 | blame | 历史 | |
test/multiple_queue_productor | 补丁 | 查看 | 原始文档 | blame | 历史 | |
test/single_consumer | 补丁 | 查看 | 原始文档 | blame | 历史 | |
test/single_productor | 补丁 | 查看 | 原始文档 | blame | 历史 | |
test/test.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
test/test_queue | 补丁 | 查看 | 原始文档 | blame | 历史 | |
test/test_timeout | 补丁 | 查看 | 原始文档 | blame | 历史 |
squeue/include/array_lock_free_queue.h
@@ -1,9 +1,9 @@ #ifndef __LOCK_FREE_QUEUE_IMPL_MULTIPLE_PRODUCER_H__ #define __LOCK_FREE_QUEUE_IMPL_MULTIPLE_PRODUCER_H__ #ifndef __ARRAY_LOCK_FREE_QUEUE_IMPL_MULTIPLE_PRODUCER_H__ #define __ARRAY_LOCK_FREE_QUEUE_IMPL_MULTIPLE_PRODUCER_H__ #include <assert.h> // assert() #include <sched.h> // sched_yield() #include "logger_factory.h" /// @brief implementation of an array based lock free queue with support for /// multiple producers squeue/include/linked_lock_free_queue.h
@@ -98,7 +98,7 @@ template <typename T> LinkedLockFreeQueue<T>::~LinkedLockFreeQueue() { std::cerr << "LinkedLockFreeQueue destory" << std::endl; LoggerFactory::getLogger().debug("LinkedLockFreeQueue destory"); Node<T> * nodeptr; Pointer<T> tmp = Head.load(std::memory_order_relaxed); while((nodeptr = tmp.ptr) != NULL) { squeue/include/lock_free_queue.h
@@ -1,5 +1,5 @@ #ifndef _LOCK_FREE_QUEUE_H__ #define _LOCK_FREE_QUEUE_H__ #ifndef __LOCK_FREE_QUEUE_H__ #define __LOCK_FREE_QUEUE_H__ #include <stdint.h> // uint32_t #include <atomic> @@ -7,6 +7,7 @@ #include <assert.h> // assert() #include "mm.h" #include "sem_util.h" #include "logger_factory.h" // default Queue size #define LOCK_FREE_Q_DEFAULT_SIZE 16 @@ -150,7 +151,7 @@ template <typename T> class Q_TYPE> LockFreeQueue<ELEM_T, Q_TYPE>::~LockFreeQueue() { std::cerr << "LockFreeQueue desctroy" << std::endl; LoggerFactory::getLogger().debug("LockFreeQueue desctroy"); SemUtil::remove(slots); SemUtil::remove(items); } squeue/include/queue_factory.h
@@ -32,7 +32,7 @@ hashtable_put(hashtable, key, (void *)queue); } std::cout << "createQueue reference===" << queue->reference << std::endl; return queue; } @@ -43,6 +43,7 @@ LockFreeQueue<T>* createQueue(int key, size_t size = 16) { LockFreeQueue<T> *queue = _createQueue<T>(key, size); queue->reference++; LoggerFactory::getLogger().debug("createQueue reference===%d", queue->reference.load()); return queue; } @@ -56,7 +57,7 @@ return; queue->reference--; std::cout << "dropQueue reference===" << queue->reference << std::endl; LoggerFactory::getLogger().debug("dropQueue reference===%d", queue->reference.load()); if(queue->reference == 0) { delete queue; hashtable_t *hashtable = getHashTable(); squeue/include/squeue1.h
File was deleted squeue/logger_factory.h
New file @@ -0,0 +1,17 @@ #ifndef __LOGGER_FACTORY_H__ #define __LOGGER_FACTORY_H__ #include "logger.h" class LoggerFactory { public: static Logger getLogger() { static Logger logger(Logger::ALL); return logger; } }; #endif squeue/mm.c
@@ -3,7 +3,7 @@ */ #include "mm.h" #include "sem_util.h" #include "logger_factory.h" /* $begin mallocmacros */ /* single word (4) or double word (8) alignment */ @@ -279,12 +279,29 @@ void mm_destroy(void) { struct shmid_ds shmid_ds; //detache if (shmdt(shmp) == -1) err_exit(errno, "mm_init shmdt"); if (shmctl(shmid, IPC_RMID, 0) == -1) err_exit(errno, "mm_init shmctl IPC_RMID"); SemUtil::remove(mutex); err_exit(errno, "mm_destroy shmdt"); if(shmctl(shmid, IPC_STAT, &shmid_ds) == -1) { err_exit(errno, "mm_destroy shmctl IPC_STAT"); } else { //LoggerFactory::getLogger().debug("shm_nattch=%d\n", shmid_ds.shm_nattch); if(shmid_ds.shm_nattch == 0) { //remove shared memery if (shmctl(shmid, IPC_RMID, 0) == -1) err_exit(errno, "mm_destroy shmctl IPC_RMID"); else LoggerFactory::getLogger().debug("shared memory destroy\n"); SemUtil::remove(mutex); } } } /* * extend_heap - Extend heap with free block and return its block pointer test/multiple_queue_consumerBinary files differ
test/multiple_queue_productorBinary files differ
test/single_consumerBinary files differ
test/single_productorBinary files differ
test/test.h
@@ -26,7 +26,7 @@ // delete queue; QueueFactory::dropQueue<struct Item>(key); //mm_destroy(); mm_destroy(); } test/test_queueold mode 100755 new mode 100644 Binary files differ
test/test_timeoutBinary files differ