wangzhengquan
2020-07-07 37a7bd95042c19d7334b099d50ac6dc8e07e4b4e
squeue/include/linked_lock_free_queue.h
@@ -47,17 +47,21 @@
template <typename T>
template <typename ELEM_T>
class LinkedLockFreeQueue
{
    template <
        typename ELEM_T_,
        template <typename T> class Q_TYPE >
    friend class LockFreeQueue;
private:
// class scope definitions
    enum {Q_SIZE = 10};
  
// private class members
    std::atomic<Pointer<T> > Head;       // pointer to front of Queue
    std::atomic<Pointer<T> > Tail;        // pointer to rear of Queue
    std::atomic<Pointer<ELEM_T> > Head;       // pointer to front of Queue
    std::atomic<Pointer<ELEM_T> > Tail;        // pointer to rear of Queue
    //std::atomic_uint count;          // current number of size in Queue
    std::atomic_uint count;
    const size_t qsize;    // maximum number of size in Queue
@@ -70,15 +74,13 @@
    bool empty() const;
    bool full() const;
    unsigned int size() const;
    bool push(const T &item); // add item to end
    bool pop(T &item);
    bool push(const ELEM_T &item); // add item to end
    bool pop(ELEM_T &item);
    
    T& operator[](unsigned i);
    ELEM_T& operator[](unsigned i);
};
// Queue methods
@@ -91,15 +93,12 @@
    Head.store(pointer, std::memory_order_relaxed);
    Tail.store(pointer, std::memory_order_relaxed);
}
template <typename T>
LinkedLockFreeQueue<T>::~LinkedLockFreeQueue()
{
    std::cerr << "LinkedLockFreeQueue destory" << std::endl;
    Node<T> * nodeptr;
    Pointer<T> tmp = Head.load(std::memory_order_relaxed);
    while((nodeptr = tmp.ptr) != NULL) {
@@ -108,7 +107,6 @@
        delete nodeptr;
    }
}
template <typename T>