锁定多个生产者单个消费者

时间:2014-05-11 06:52:19

标签: c++ producer-consumer

我正在尝试解决多生产者单个消费者问题,生产者生成整数,消费者从所有这些整数中生成排序列表(使用AVL树)。我该如何锁定树数据结构?还是没必要?队列具有适当的锁定以进行推送和弹出操作。

void consumer(NaiveQueue<nodeQ> &obj)
{
    while(1)
    {
    nodeQ *temp;
    temp=NULL;
    temp=obj.pop();
    if(temp)
      {
        cout << "\nRemoved : " << temp->data;
        root=insert(root,temp->data); //****lock this??????
        delete temp;
      }
   }  
}

Producer(多线程生成器=&gt;主线制作的线程):

void makeChildThread(int &newsockfd,char msg[MAXSZ],NaiveQueue<nodeQ> &obj)
{
   //receive from client
   while(1)
   {
    int n=recv(newsockfd,msg,MAXSZ,0);
    if(n==0)
    {
     close(newsockfd);
     break;
    }
    //msg[n]=0;
    //send(newsockfd,msg,n,0);
    int val=atoi(msg);
    if(val == 0)
    {
        break;
        exit(0);
    }

    nodeQ *temp;
    temp=new nodeQ();
    temp->data=val;
    obj.push(temp);
    cout<<"\nPushed : "<<val;

    cout<<"\nReceived :"<<msg;
   }//close while
    cout<<"\nExit from thread";
}

1 个答案:

答案 0 :(得分:1)

由于队列将被所有生产者和消费者访问,因此访问需要同步。但是如果单个消费者使用树,为什么要锁定它呢?锁定是不必要的,将导致额外的开销。