I am trying to implement lock free queue of user defined data type using boost library, but I am getting wrong result.
Please help me out where I am doing wrong.
#include <boost/lockfree/spsc_queue.hpp>
#include <thread>
#include <iostream>
#include <string.h>
#include <time.h>   
class Queue
{
 private:
       unsigned char *m_data;
       int m_len;
 public:
       Queue(unsigned char *data,int len);
       Queue(const Queue &obj);
       ~Queue();  
       Queue & operator =(const Queue &obj);
       unsigned char *getdata()
       {
         return m_data;
       }
       int getint()
       {
           return m_len;
       }
};
Queue::Queue(unsigned char* data, int len)
{
      m_len=len;
      m_data=new unsigned char[m_len];
      memcpy(m_data,data,m_len);
}
Queue::Queue(const Queue& obj)
{
      m_len=  obj.m_len;
      m_data=new unsigned char[m_len];
      memcpy(m_data,(unsigned char *)obj.m_data,m_len);
}
Queue::~Queue()
{
   delete[] m_data;
   m_len=0;
}
Queue & Queue::operator =(const Queue &obj)
{
   if(this != &obj)
   {
      m_len=obj.m_len;
      m_data=new unsigned char[m_len];
      memcpy(m_data,(unsigned char *)obj.m_data,m_len);
   }
   return *this;
}
boost::lockfree::spsc_queue<Queue*> q(10);
void produce()
{
    int i=0;
    unsigned char* data=(unsigned char *)malloc(10);
    memset(data,1,9);
    Queue obj(data,10);
    Queue *pqueue=&obj;
    printf("%d\n",pqueue->getint());
    q.push(pqueue);
}
void consume()
{
    Queue *obj;
    q.pop(&obj);
    printf("%d\n",obj->getint());
}
int main(int argc, char** argv) {
//  std::thread t1{produce};
//  std::thread t2{consume};
//  
//  t1.join();
//  t2.join();
    produce();
    consume();
    return 0;
}
As per boost::lockfree::queue requirements I created following in class.
- Copy Constructor
- Assignment Operator
- Destructor
Please let me know if anything other requires. Thanks.
 
     
    