锁定多个生产者单个消费者
Locking in Multiple producer single consumer
我正试图解决一个多生产者单一消费者问题,生产者生成整数,消费者从所有这些整数(使用AVL树)中生成排序列表。如何锁定树形数据结构?还是没有必要?队列对push和pop操作有适当的锁定。
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(多线程Producer => threads made in main):
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";
}
由于队列将被所有生产者和消费者访问,因此访问需要同步。但是如果树被单个消费者使用,为什么要锁定它呢?锁是不必要的,会造成额外的开销。
相关文章:
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 消费者和生产者问题的双重缓冲
- Eclipse CDT:单个项目中有多个C++文件
- 为什么我们将单个或多维数组的大小声明为常量值?
- C++调用具有 *this 属性的单个帮助程序函数
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 将多个 for 循环组合成单个迭代器
- 如何将多种语言设置放在单个 .clang 格式文件中
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 在 c++ 中对单个排序数组中的 2 个未排序数组进行排序
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 单个生产者/多个消费者死锁
- 单个生产者和多个单线程消费者
- 单个生产者多个消费者循环缓冲区
- STL容器,用于单个生产商-单个消费者FIFO
- 使用C++的单个生产者和多个消费者
- 锁定多个生产者单个消费者
- 单个生产者多个消费者:如何告诉消费者生产已经完成