]> AND Private Git Repository - loba.git/blobdiff - sync_queue.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Remove parameter "next" for constructor of sync_queue<T>::node.
[loba.git] / sync_queue.h
index 888854871e408697737566eb3d7d16ce04e5de43..357a72d8379a1c127b1499646fb4009aa18bf5a6 100644 (file)
@@ -3,6 +3,12 @@
 
 #if __GNUC__ == 4 && __GNUC_MINOR__ == 4
 #  include <cstdatomic>         // <atomic> is named <cstdatomic> in gcc 4.4
 
 #if __GNUC__ == 4 && __GNUC_MINOR__ == 4
 #  include <cstdatomic>         // <atomic> is named <cstdatomic> in gcc 4.4
+
+template<typename _Tp>          // fix missing definition in gcc 4.4
+void
+atomic<_Tp*>::store(_Tp* __v, memory_order __m) volatile
+{ atomic_address::store(__v, __m); }
+
 #else
 #  include <atomic>
 #endif
 #else
 #  include <atomic>
 #endif
@@ -12,9 +18,9 @@ class sync_queue {
 public:
     sync_queue()
     {
 public:
     sync_queue()
     {
-        node* n = new node(NULL, NULL);
-        std::atomic_store(&head, n); // head.store(n);
-        std::atomic_store(&tail, n); // tail.store(n);
+        node* n = new node(NULL);
+        head.store(n);
+        tail.store(n);
     }
 
     ~sync_queue()
     }
 
     ~sync_queue()
@@ -44,9 +50,9 @@ public:
     bool push(const T& val)
     {
         node* old_tail = tail.load();
     bool push(const T& val)
     {
         node* old_tail = tail.load();
-        node* n = new node(val, NULL);
+        node* n = new node(val);
         old_tail->next = n;
         old_tail->next = n;
-        std::atomic_store(&tail, n); // tail.store(n);
+        tail.store(n);
         return (old_tail == head.load());
     }
 
         return (old_tail == head.load());
     }
 
@@ -57,7 +63,7 @@ public:
             return false;
         } else {
             node* new_head = old_head->next;
             return false;
         } else {
             node* new_head = old_head->next;
-            std::atomic_store(&head, new_head); // head.store(new_head);
+            head.store(new_head);
             delete old_head;
             res = new_head->value;
             return true;
             delete old_head;
             res = new_head->value;
             return true;
@@ -66,7 +72,7 @@ public:
 
 private:
     struct node {
 
 private:
     struct node {
-        node(const T& v, node* n): value(v), next(n) { }
+        node(const T& v): value(v), next(NULL) { }
         T value;
         node* next;
     };
         T value;
         node* next;
     };