From 91f003aac4c95f4d2a2fc0782c9bea9d484b6919 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期四, 09 七月 2020 14:48:07 +0800 Subject: [PATCH] update --- queue/include/array_lock_free_queue.h | 10 queue/include/shm_queue.h | 26 -- .gitignore | 3 Makefile | 2 test/test_timeout | 0 queue/logger_factory.h | 0 test2/test_queue_wrapper.c | 48 +++++ queue/include/shm_queue_wrapper.h | 146 ++++++++++++++++ test2/Makefile | 32 +++ queue/include/linked_lock_free_queue.h | 0 test/test_queue.c | 36 +++ test/test_queue | 0 queue/include/shm_allocator.h | 0 queue/libshm_queue.a | 0 test2/test_queue_wrapper | 0 test/test | 0 test/multiple_queue_consumer | 0 test/multiple_queue_productor | 0 README.md | 131 ++++++++++++++ queue/hashtable.c | 0 queue/sem_util.c | 0 queue/Makefile | 4 test/Makefile | 18 +- queue/sem_util.h | 0 queue/mm.c | 0 test/single_consumer | 0 test/test.c | 35 +++ test/single_productor | 0 queue/hashtable.h | 0 queue/include/queue_factory.h | 0 queue/mm.h | 0 queue/include/lock_free_queue.h | 0 32 files changed, 446 insertions(+), 45 deletions(-) diff --git a/.gitignore b/.gitignore index d37cf8e..f2d51ac 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ *.pch # Compiled Dynamic libraries -*.so *.dylib *.dll @@ -23,8 +22,6 @@ # Compiled Static libraries *.lai *.la -*.a -*.lib # Executables *.exe diff --git a/Makefile b/Makefile index 6a36d7b..a40c84c 100755 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -DIRS = squeue test +DIRS = queue test all: for i in $(DIRS); do \ diff --git a/README.md b/README.md index 891e42f..29dd32a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,131 @@ -## cppShmqueue +## 瀹炰緥 -Cpp鐗堟湰鐨勫叡浜唴瀛橀槦鍒楀簱 +``` +#include "shm_queue_wrapper.h" +#include "mm.h" + +typedef struct message_t +{ + char method[20]; + int code; + +} message_t; + +void test1() { + unsigned int i = 0; + int key = 2; + + size_t qsize = 16; + shmqueue_t queue; + shmqueue_init(&queue, key, qsize, sizeof(message_t)); + message_t item; + // LockFreeQueue<struct Item> queue(16); + for(i = 0; i < qsize; i++) { + sprintf(item.method, "hello"); + item.code = i ; + if(shmqueue_push(&queue, (void *)&item)) { + printf("push:%d %s\n", item.code, item.method ); + } + } + + struct timespec timeout = {1, 0}; + + i = 0; + while((shmqueue_pop_timeout(&queue, (void *)&item, &timeout)) ) { + printf("pop:%d %s\n", item.code, item.method ); + // cout << item.pic << endl; + i++; + } + + shmqueue_destroy(&queue); +} + + +int main () { + test1(); + + //鏁翠釜杩涚▼閫�鍑烘椂闇�瑕佹墽琛岃繖涓柟娉曪紝璇ユ柟娉曢鍏堜細妫�鏌ユ槸鍚﹁繕鏈夊叾浠栬繘绋嬪湪浣跨敤璇ュ叡浜唴瀛橈紝濡傛灉杩樻湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ氨鍙槸detach,濡傛灉娌℃湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄩ攢姣佹暣鍧楀唴瀛樸�� + mm_destroy(); + return 0; +} +``` +## 鎺ュ彛璇存槑 + +``` + +/** + * 鍒濆鍖� + * @ shmqueue + * @ key 鏍囪瘑鍏变韩闃熷垪鐨勫敮涓�key + * @ queue_size 闃熷垪澶у皬 + * @ ele_size 闃熷垪涓厓绱犲ぇ灏� + */ +inline void shmqueue_init(shmqueue_t *shmqueue, int key, int queue_size, int ele_size) { + if(ele_size > MAX_ELE_SIZE) { + err_exit(0, "shmqueue_init 鍏冪礌澶у皬瓒呰繃璁捐鐨勬渶澶уぇ灏�"); + } + SHMQueue<ele_t> *queue = new SHMQueue<ele_t>(key, queue_size); + shmqueue->mqueue = (void *)queue; + shmqueue->ele_size = ele_size; +} + + + +/** + * 閿�姣� +*/ +inline void shmqueue_destroy(shmqueue_t *shmqueue) { + delete (SHMQueue<ele_t> *)shmqueue->mqueue; +} + +/** + * 闃熷垪鍏冪礌鐨勪釜鏁� + */ +inline uint32_t shmqueue_size(shmqueue_t *shmqueue) { + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->size(); +} + +/** + * 鏄惁宸叉弧 + */ +inline int shmqueue_full(shmqueue_t *shmqueue) { + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->full(); +} + +/** + * 鏄惁涓虹┖ + */ +inline int shmqueue_empty(shmqueue_t *shmqueue) { + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->empty(); +} + +/** + * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟 + */ +inline int shmqueue_push(shmqueue_t *shmqueue, void *src_ele) + +/** + * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖 + */ +inline int shmqueue_push_nowait(shmqueue_t *shmqueue, void *src_ele) + +/** + * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆瀵逛笉鎴愬姛灏辫繑鍥� + */ +inline int shmqueue_push_timeout(shmqueue_t *shmqueue, void *src_ele, struct timespec * timeout) +/** + * 鍑洪槦, 闃熷垪绌烘椂绛夊緟 + */ +inline int shmqueue_pop(shmqueue_t *shmqueue, void *dest_ele) + +/** + * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖 + */ +inline int shmqueue_pop_nowait(shmqueue_t *shmqueue, void *dest_ele) +/** + * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭瀵逛笉鎴愬姛灏辫繑鍥� + */ +inline int shmqueue_pop_timeout(shmqueue_t *shmqueue, void *dest_ele, struct timespec * timeout) + +``` diff --git a/squeue/Makefile b/queue/Makefile similarity index 94% rename from squeue/Makefile rename to queue/Makefile index 8333f37..c18e39a 100644 --- a/squeue/Makefile +++ b/queue/Makefile @@ -14,8 +14,8 @@ PLATFORM=$(shell $(ROOT)/systype.sh) include $(ROOT)/Make.defines.$(PLATFORM) -LIBSQUEUE = libsqueue.a -DLIBSQUEUE = libsqueue.so +LIBSQUEUE = libshm_queue.a +DLIBSQUEUE = libshm_queue.so SOURCES := $(wildcard *.c) OBJS = $(patsubst %.c, %.o, $(SOURCES)) diff --git a/squeue/hashtable.c b/queue/hashtable.c similarity index 100% rename from squeue/hashtable.c rename to queue/hashtable.c diff --git a/squeue/hashtable.h b/queue/hashtable.h similarity index 100% rename from squeue/hashtable.h rename to queue/hashtable.h diff --git a/squeue/include/array_lock_free_queue.h b/queue/include/array_lock_free_queue.h similarity index 95% rename from squeue/include/array_lock_free_queue.h rename to queue/include/array_lock_free_queue.h index e03d6cd..931e839 100644 --- a/squeue/include/array_lock_free_queue.h +++ b/queue/include/array_lock_free_queue.h @@ -222,7 +222,9 @@ currentWriteIndex, (currentWriteIndex + 1))); // Just made sure this index is reserved for this thread. - m_theQueue[countToIndex(currentWriteIndex)] = a_data; + // m_theQueue[countToIndex(currentWriteIndex)] = a_data; + // printf("===sizeof(ELEM_T) = %d\n", sizeof(ELEM_T)); + memcpy((void *)(&m_theQueue[countToIndex(currentWriteIndex)]), (void *)(&a_data), sizeof(ELEM_T) ); // update the maximum read index after saving the piece of data. It can't // fail if there is only one thread inserting in the queue. It might fail @@ -240,7 +242,7 @@ // software threads than hardware processors and you have more // than 1 producer thread // have a look at sched_yield (POSIX.1b) - //sched_yield(); + sched_yield(); } // The value was successfully inserted into the queue @@ -278,8 +280,8 @@ #endif // retrieve the data from the queue - a_data = m_theQueue[countToIndex(currentReadIndex)]; - + //a_data = m_theQueue[countToIndex(currentReadIndex)]; + memcpy((void*) (&a_data), (void *)(&m_theQueue[countToIndex(currentReadIndex)]),sizeof(ELEM_T) ); // try to perfrom now the CAS operation on the read index. If we succeed // a_data already contains what m_readIndex pointed to before we // increased it diff --git a/squeue/include/linked_lock_free_queue.h b/queue/include/linked_lock_free_queue.h similarity index 100% rename from squeue/include/linked_lock_free_queue.h rename to queue/include/linked_lock_free_queue.h diff --git a/squeue/include/lock_free_queue.h b/queue/include/lock_free_queue.h similarity index 100% rename from squeue/include/lock_free_queue.h rename to queue/include/lock_free_queue.h diff --git a/squeue/include/queue_factory.h b/queue/include/queue_factory.h similarity index 100% rename from squeue/include/queue_factory.h rename to queue/include/queue_factory.h diff --git a/squeue/include/shm_allocator.h b/queue/include/shm_allocator.h similarity index 100% rename from squeue/include/shm_allocator.h rename to queue/include/shm_allocator.h diff --git a/squeue/include/shm_queue.h b/queue/include/shm_queue.h similarity index 79% rename from squeue/include/shm_queue.h rename to queue/include/shm_queue.h index 0bcc3db..70cd9cc 100644 --- a/squeue/include/shm_queue.h +++ b/queue/include/shm_queue.h @@ -9,9 +9,6 @@ // default Queue size // #define LOCK_FREE_Q_DEFAULT_SIZE 16 - -// - template < typename ELEM_T> class SHMQueue @@ -37,35 +34,18 @@ /// @brief constructor of the class SHMQueue(int key=0, size_t qsize = LOCK_FREE_Q_DEFAULT_SIZE); - /// @brief destructor of the class. - /// Note it is not virtual since it is not expected to inherit from this - /// template + ~SHMQueue(); - /// @brief returns the current number of items in the queue - /// It tries to take a snapshot of the size of the queue, but in busy environments - /// this function might return bogus values. - /// - /// If a reliable queue size must be kept you might want to have a look at - /// the preprocessor variable in this header file called '_WITH_LOCK_FREE_Q_KEEP_REAL_SIZE' - /// it enables a reliable size though it hits overall performance of the queue - /// (when the reliable size variable is on it's got an impact of about 20% in time) + inline uint32_t size(); - - /// @brief return true if the queue is full. False otherwise - /// It tries to take a snapshot of the size of the queue, but in busy - /// environments this function might return bogus values. See help in method - /// SHMQueue::size + inline bool full(); - inline bool empty(); - inline bool push(const ELEM_T &a_data); inline bool push_nowait(const ELEM_T &a_data); inline bool push_timeout(const ELEM_T &a_data, struct timespec * timeout); - - inline bool pop(ELEM_T &a_data); inline bool pop_nowait(ELEM_T &a_data); inline bool pop_timeout(ELEM_T &a_data, struct timespec * timeout); diff --git a/queue/include/shm_queue_wrapper.h b/queue/include/shm_queue_wrapper.h new file mode 100644 index 0000000..ff918b6 --- /dev/null +++ b/queue/include/shm_queue_wrapper.h @@ -0,0 +1,146 @@ +#ifndef __SHM_QUEUE_WRAPPER_H__ +#define __SHM_QUEUE_WRAPPER_H__ + +#include "usg_common.h" +#include "usg_typedef.h" +#include "shm_queue.h" +#include "shm_allocator.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MAX_ELE_SIZE 512 + +typedef struct ele_t { + char buf[MAX_ELE_SIZE]; +} ele_t; + +typedef struct shmqueue_t { + size_t ele_size; + void *mqueue; +} shmqueue_t; + +/** + * 鍒濆鍖� + * @ shmqueue + * @ key 鏍囪瘑鍏变韩闃熷垪鐨勫敮涓�key + * @ queue_size 闃熷垪澶у皬 + * @ ele_size 闃熷垪涓厓绱犲ぇ灏� + */ +inline void shmqueue_init(shmqueue_t *shmqueue, int key, int queue_size, int ele_size) { + if(ele_size > MAX_ELE_SIZE) { + err_exit(0, "shmqueue_init 鍏冪礌澶у皬瓒呰繃璁捐鐨勬渶澶уぇ灏�"); + } + SHMQueue<ele_t> *queue = new SHMQueue<ele_t>(key, queue_size); + shmqueue->mqueue = (void *)queue; + shmqueue->ele_size = ele_size; +} + + + +/** + * 閿�姣� +*/ +inline void shmqueue_destroy(shmqueue_t *shmqueue) { + delete (SHMQueue<ele_t> *)shmqueue->mqueue; +} + +/** + * 闃熷垪鍏冪礌鐨勪釜鏁� + */ +inline uint32_t shmqueue_size(shmqueue_t *shmqueue) { + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->size(); +} + +/** + * 鏄惁宸叉弧 + */ +inline int shmqueue_full(shmqueue_t *shmqueue) { + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->full(); +} + +/** + * 鏄惁涓虹┖ + */ +inline int shmqueue_empty(shmqueue_t *shmqueue) { + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->empty(); +} + +/** + * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟 + */ +inline int shmqueue_push(shmqueue_t *shmqueue, void *src_ele) { + ele_t dest_ele; + memcpy(&dest_ele.buf, src_ele, shmqueue->ele_size); + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push(dest_ele); +} + +/** + * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖 + */ +inline int shmqueue_push_nowait(shmqueue_t *shmqueue, void *src_ele) { + ele_t dest_ele; + memcpy(&dest_ele.buf, src_ele, shmqueue->ele_size); + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_nowait(dest_ele); +} + +/** + * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆瀵逛笉鎴愬姛灏辫繑鍥� + */ +inline int shmqueue_push_timeout(shmqueue_t *shmqueue, void *src_ele, struct timespec * timeout) { + ele_t dest_ele; + memcpy(&dest_ele.buf, src_ele, shmqueue->ele_size); + return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_timeout(dest_ele, timeout); +} + +/** + * 鍑洪槦, 闃熷垪绌烘椂绛夊緟 + */ +inline int shmqueue_pop(shmqueue_t *shmqueue, void *dest_ele) { + ele_t src_ele; + bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop(src_ele); + if (rv) { + memcpy(dest_ele, &src_ele.buf, shmqueue->ele_size); + return 1; + } else { + return 0; + } + +} + +/** + * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖 + */ +inline int shmqueue_pop_nowait(shmqueue_t *shmqueue, void *dest_ele) { + ele_t src_ele; + bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_nowait(src_ele); + if (rv) { + memcpy(dest_ele, &src_ele.buf, shmqueue->ele_size); + return 1; + } else { + return 0; + } +} + +/** + * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭瀵逛笉鎴愬姛灏辫繑鍥� + */ +inline int shmqueue_pop_timeout(shmqueue_t *shmqueue, void *dest_ele, struct timespec * timeout) { + ele_t src_ele; + bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_timeout(src_ele, timeout); + if (rv) { + memcpy(dest_ele, &src_ele.buf, shmqueue->ele_size); + return 1; + } else { + return 0; + } +} + + + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/queue/libshm_queue.a b/queue/libshm_queue.a new file mode 100644 index 0000000..bb19a8f --- /dev/null +++ b/queue/libshm_queue.a Binary files differ diff --git a/squeue/logger_factory.h b/queue/logger_factory.h similarity index 100% rename from squeue/logger_factory.h rename to queue/logger_factory.h diff --git a/squeue/mm.c b/queue/mm.c similarity index 100% rename from squeue/mm.c rename to queue/mm.c diff --git a/squeue/mm.h b/queue/mm.h similarity index 100% rename from squeue/mm.h rename to queue/mm.h diff --git a/squeue/sem_util.c b/queue/sem_util.c similarity index 100% rename from squeue/sem_util.c rename to queue/sem_util.c diff --git a/squeue/sem_util.h b/queue/sem_util.h similarity index 100% rename from squeue/sem_util.h rename to queue/sem_util.h diff --git a/test/Makefile b/test/Makefile index fdcff9a..00aeefc 100755 --- a/test/Makefile +++ b/test/Makefile @@ -4,17 +4,17 @@ ROOT=.. #LDLIBS+=-Wl,-rpath=$(ROOT)/common:$(ROOT)/lib/jsoncpp # 寮�婧愬伐鍏峰寘璺緞 -LDDIR += -L$(ROOT)/squeue +LDDIR += -L$(ROOT)/queue # 寮�婧愬伐鍏峰寘 -LDLIBS += -lsqueue -lpthread +LDLIBS += -lshm_queue -lpthread -INCLUDE += -I$(ROOT)/squeue/ -I$(ROOT)/squeue/include +INCLUDE += -I$(ROOT)/queue/ -I$(ROOT)/queue/include PLATFORM=$(shell $(ROOT)/systype.sh) include $(ROOT)/Make.defines.$(PLATFORM) -PROGS = test_queue single_productor single_consumer multiple_queue_productor multiple_queue_consumer test_timeout +PROGS = test_queue single_productor single_consumer multiple_queue_productor multiple_queue_consumer test_timeout test_queue_wrapper build: $(PROGS) @@ -24,16 +24,16 @@ # 濡傛灉鍖匒 寮曠敤鍖匓锛� B 瑕佹斁鍦� A 鍚庨潰 -test_queue: test.h $(ROOT)/squeue/include/lock_free_queue.h +test_queue: test.h $(ROOT)/queue/include/lock_free_queue.h -single_productor: test.h $(ROOT)/squeue/include/lock_free_queue.h +single_productor: test.h $(ROOT)/queue/include/lock_free_queue.h -single_consumer: test.h $(ROOT)/squeue/include/lock_free_queue.h +single_consumer: test.h $(ROOT)/queue/include/lock_free_queue.h clean: rm -f $(TEMPFILES) $(PROGS) -$(LIBSQUEUE): - (cd $(ROOT)/squeue && $(MAKE)) +$(LIBQUEUE): + (cd $(ROOT)/queue && $(MAKE)) diff --git a/test/multiple_queue_consumer b/test/multiple_queue_consumer index ac28596..1724036 100755 --- a/test/multiple_queue_consumer +++ b/test/multiple_queue_consumer Binary files differ diff --git a/test/multiple_queue_productor b/test/multiple_queue_productor index 9db7ae0..ffbdb91 100755 --- a/test/multiple_queue_productor +++ b/test/multiple_queue_productor Binary files differ diff --git a/test/single_consumer b/test/single_consumer index eb83102..926e299 100755 --- a/test/single_consumer +++ b/test/single_consumer Binary files differ diff --git a/test/single_productor b/test/single_productor index 7dcfc82..8caa7bb 100755 --- a/test/single_productor +++ b/test/single_productor Binary files differ diff --git a/test/test b/test/test new file mode 100755 index 0000000..5e82a18 --- /dev/null +++ b/test/test Binary files differ diff --git a/test/test.c b/test/test.c index e69de29..99e3289 100644 --- a/test/test.c +++ b/test/test.c @@ -0,0 +1,35 @@ +#include "test.h" +#define MKEY 0x2222 +int testmatshm() { + + int shmid = -1; + void *shmp; + shmid = shmget(MKEY, 1024, IPC_CREAT | IPC_EXCL | OBJ_PERMS); + if (shmid == -1 && errno == EEXIST) { + printf("first create\n"); + shmid = shmget(MKEY, 0, 0); + } + + if (shmid == -1) + err_exit(errno, "testmatshm shmget"); + + shmp = shmat(shmid, NULL, 0); +} + +typedef struct buf_t { char buf[7]; } buf_t; + +void test(int size) { + char buf[size]; + printf("size = %d\n", sizeof(buf)); +} + +char msg[10]; +int main() { + // testmatshm(); + // testmatshm(); + + // sleep(60); + + // printf("size = %d, msg = %d\n", sizeof(buf_t), sizeof(msg)); + test(12); +} \ No newline at end of file diff --git a/test/test_queue b/test/test_queue index ca75da2..4a4735a 100755 --- a/test/test_queue +++ b/test/test_queue Binary files differ diff --git a/test/test_queue.c b/test/test_queue.c index cb6ade7..9b64ceb 100644 --- a/test/test_queue.c +++ b/test/test_queue.c @@ -84,8 +84,42 @@ } +// void testArr(unsigned size) { +// unsigned int i = 0; +// int key = 2; + +// char item[size]; + +// size_t qsize = 16; +// //LockFreeQueue<struct Item> *queue = QueueFactory::createQueue<struct Item> (key, qsize); +// SHMQueue<char[size]> *queue = new SHMQueue<char[size]>(key, 16); +// // LockFreeQueue<struct Item> queue(16); +// for(i = 0; i < qsize; i++) { +// sprintf(item, "%d hello", i); +// if(queue->push(item)) { +// cout << i << " push锛�" << item << endl; +// } +// } + + + + + +// struct timespec timeout = {1, 0}; + +// i = 0; +// while((queue->pop_timeout(item, &timeout)) ) { +// cout << i << " pop锛�" << item << endl; +// // cout << item.pic << endl; +// i++; +// } + +// delete queue; +// } + + int main () { - testString(); + // testArr(12); mm_destroy(); diff --git a/test/test_timeout b/test/test_timeout index a72120f..32e3a16 100755 --- a/test/test_timeout +++ b/test/test_timeout Binary files differ diff --git a/test2/Makefile b/test2/Makefile new file mode 100644 index 0000000..072837c --- /dev/null +++ b/test2/Makefile @@ -0,0 +1,32 @@ +# +# Makefile for common library. +# +ROOT=.. +#LDLIBS+=-Wl,-rpath=$(ROOT)/common:$(ROOT)/lib/jsoncpp +# 寮�婧愬伐鍏峰寘璺緞 +LDDIR += -L$(ROOT)/queue +# 寮�婧愬伐鍏峰寘 +LDLIBS += -lshm_queue -lpthread + +INCLUDE += -I$(ROOT)/queue/ -I$(ROOT)/queue/include + +PLATFORM=$(shell $(ROOT)/systype.sh) +include $(ROOT)/Make.defines.$(PLATFORM) + + +PROGS = test_queue_wrapper + + +build: $(PROGS) + +# test1: $(LIBCOMMON) + +# 濡傛灉鍖匒 寮曠敤鍖匓锛� B 瑕佹斁鍦� A 鍚庨潰 + +clean: + rm -f $(TEMPFILES) $(PROGS) + + + +$(LIBQUEUE): + (cd $(ROOT)/queue && $(MAKE)) diff --git a/test2/test_queue_wrapper b/test2/test_queue_wrapper new file mode 100755 index 0000000..141be3f --- /dev/null +++ b/test2/test_queue_wrapper Binary files differ diff --git a/test2/test_queue_wrapper.c b/test2/test_queue_wrapper.c new file mode 100644 index 0000000..ae242a4 --- /dev/null +++ b/test2/test_queue_wrapper.c @@ -0,0 +1,48 @@ +#include "shm_queue_wrapper.h" +#include "mm.h" + +typedef struct message_t +{ + char method[20]; + int code; + +} message_t; + +void test1() { + unsigned int i = 0; + int key = 2; + + size_t qsize = 16; + shmqueue_t queue; + shmqueue_init(&queue, key, qsize, sizeof(message_t)); + message_t item; + // LockFreeQueue<struct Item> queue(16); + for(i = 0; i < qsize; i++) { + sprintf(item.method, "hello"); + item.code = i ; + if(shmqueue_push(&queue, (void *)&item)) { + printf("push:%d %s\n", item.code, item.method ); + } + } + + struct timespec timeout = {1, 0}; + + i = 0; + while((shmqueue_pop_timeout(&queue, (void *)&item, &timeout)) ) { + printf("pop:%d %s\n", item.code, item.method ); + // cout << item.pic << endl; + i++; + } + + //閿�姣侀槦鍒� + shmqueue_destroy(&queue); +} + + +int main () { + test1(); + + //鏁翠釜杩涚▼閫�鍑烘椂闇�瑕佹墽琛岃繖涓柟娉曪紝璇ユ柟娉曢鍏堜細妫�鏌ユ槸鍚﹁繕鏈夊叾浠栬繘绋嬪湪浣跨敤璇ュ叡浜唴瀛橈紝濡傛灉杩樻湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ氨鍙槸detach,濡傛灉娌℃湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ垯閿�姣佹暣鍧楀唴瀛樸�� + mm_destroy(); + return 0; +} \ No newline at end of file -- Gitblit v1.8.0