From 6da3e92dab82554db8492d2bd7981ecd9ef3fd65 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 23 七月 2020 15:57:34 +0800
Subject: [PATCH] sycronized

---
 src/queue/mm.c                      |    7 +++++--
 src/libshm_queue.a                  |    0 
 demo/queue                          |    0 
 src/queue/include/shm_queue.h       |    6 +++++-
 test_socket/dgram_socket_test       |    0 
 src/queue/hashtable.c               |    8 +++++++-
 demo/pub_sub                        |    0 
 test_socket/dgram_mod_req_rep       |    0 
 src/queue/include/lock_free_queue.h |    5 +++--
 demo/req_rep                        |    0 
 10 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/demo/pub_sub b/demo/pub_sub
index 1cc620d..093adca 100755
--- a/demo/pub_sub
+++ b/demo/pub_sub
Binary files differ
diff --git a/demo/queue b/demo/queue
index 43913ed..3676d0e 100755
--- a/demo/queue
+++ b/demo/queue
Binary files differ
diff --git a/demo/req_rep b/demo/req_rep
index a32bb1f..a9c3f85 100755
--- a/demo/req_rep
+++ b/demo/req_rep
Binary files differ
diff --git a/src/libshm_queue.a b/src/libshm_queue.a
index 92905db..e50435f 100644
--- a/src/libshm_queue.a
+++ b/src/libshm_queue.a
Binary files differ
diff --git a/src/queue/hashtable.c b/src/queue/hashtable.c
index 43c59ce..21700ac 100755
--- a/src/queue/hashtable.c
+++ b/src/queue/hashtable.c
@@ -91,9 +91,12 @@
   size_t code = hashcode(key);
   tailq_entry_t *item;
   void *oldvalue;
+
+  SemUtil::dec(hashtable->wlock);
   tailq_header_t *my_tailq_head = hashtable->array[code] ;
   if ( my_tailq_head == NULL)
   {
+    SemUtil::inc(hashtable->wlock);
     return NULL;
   }
   else
@@ -108,11 +111,12 @@
 
         /* mm_free the item as we don't need it anymore. */
         mm_free(item);
-
+        SemUtil::inc(hashtable->wlock);
         return oldvalue;
       }
     }
   }
+  SemUtil::inc(hashtable->wlock);
   return NULL;
 
 }
@@ -124,6 +128,7 @@
 void hashtable_removeall(hashtable_t *hashtable)
 {
   tailq_entry_t *item;
+  SemUtil::dec(hashtable->wlock);
   for (int i = 0; i < MAPSIZE; i++)
   {
     tailq_header_t *my_tailq_head = hashtable->array[i] ;
@@ -139,6 +144,7 @@
     mm_free(my_tailq_head);
     hashtable->array[i] = NULL;
   }
+  SemUtil::inc(hashtable->wlock);
 }
 
 /**
diff --git a/src/queue/include/lock_free_queue.h b/src/queue/include/lock_free_queue.h
index f34079f..0b6c42f 100644
--- a/src/queue/include/lock_free_queue.h
+++ b/src/queue/include/lock_free_queue.h
@@ -78,7 +78,7 @@
     int items;
    
 public:
-    // int mutex;
+    int mutex;
     LockFreeQueue(size_t qsize = LOCK_FREE_Q_DEFAULT_SIZE);
     
     /// @brief destructor of the class. 
@@ -151,7 +151,7 @@
 // std::cout << "LockFreeQueue init reference=" << reference << std::endl;
     slots = SemUtil::get(IPC_PRIVATE, qsize);
     items = SemUtil::get(IPC_PRIVATE, 0);
-    // mutex = SemUtil::get(IPC_PRIVATE, 1);
+    mutex = SemUtil::get(IPC_PRIVATE, 1);
 }
 
 template <
@@ -163,6 +163,7 @@
     LoggerFactory::getLogger().debug("LockFreeQueue desctroy");
     SemUtil::remove(slots);
     SemUtil::remove(items);
+    SemUtil::remove(mutex);
 }
 
 template <
diff --git a/src/queue/include/shm_queue.h b/src/queue/include/shm_queue.h
index d853774..30e2e28 100644
--- a/src/queue/include/shm_queue.h
+++ b/src/queue/include/shm_queue.h
@@ -6,7 +6,7 @@
 #include "lock_free_queue.h"
 #include "logger_factory.h"
 #include "shm_allocator.h"
-
+#include "sem_util.h"
 // default Queue size
 // #define LOCK_FREE_Q_DEFAULT_SIZE 16
  
@@ -97,6 +97,7 @@
 template < typename ELEM_T >
 SHMQueue<ELEM_T>::~SHMQueue()
 {
+    SemUtil::dec( queue->mutex);
     queue->reference--;
     LoggerFactory::getLogger().debug("SHMQueue destructor  reference===%d", queue->reference.load());
     if(queue->reference.load() == 0) {
@@ -104,7 +105,10 @@
         hashtable_t *hashtable = mm_get_hashtable();
         hashtable_remove(hashtable, KEY);
         LoggerFactory::getLogger().debug("SHMQueue destructor delete queue");
+    } else {
+        SemUtil::inc(queue->mutex);
     }
+    
 }
 
 template < typename ELEM_T >
diff --git a/src/queue/mm.c b/src/queue/mm.c
index bfd27d9..179f369 100644
--- a/src/queue/mm.c
+++ b/src/queue/mm.c
@@ -81,7 +81,7 @@
 static void *place(void *bp, size_t size);
 static void *find_fit(size_t size);
 static void *coalesce(void *bp);
-static void rm_fblock(void *bp);
+static inline void rm_fblock(void *bp);
 static void insert_fblock (void *bp);
 
 static void *mem_sbrk(int incr);
@@ -444,9 +444,12 @@
 /**
  * remove a block form free list
  */
-static void rm_fblock(void *rbp)
+static inline void rm_fblock(void *rbp)
 {
   // the successor of the previous block of rbp point to next block of rbp
+// err_msg(0, "SUCCRP(PREV_FBLKP(rbp) %p\n", SUCCRP(PREV_FBLKP(rbp)) );
+// err_msg(0, "NEXT_FBLKP(rbp)%p\n",        NEXT_FBLKP(rbp) );
+
   PUT_PTR(SUCCRP(PREV_FBLKP(rbp)), NEXT_FBLKP(rbp));
   // the predecessor of then next block of rbp point to previous block of rbp
   PUT_PTR(PREDRP(NEXT_FBLKP(rbp)), PREV_FBLKP(rbp));
diff --git a/test_socket/dgram_mod_req_rep b/test_socket/dgram_mod_req_rep
index f31e2b9..2643d2f 100755
--- a/test_socket/dgram_mod_req_rep
+++ b/test_socket/dgram_mod_req_rep
Binary files differ
diff --git a/test_socket/dgram_socket_test b/test_socket/dgram_socket_test
index 9752490..56cbe94 100755
--- a/test_socket/dgram_socket_test
+++ b/test_socket/dgram_socket_test
Binary files differ

--
Gitblit v1.8.0