多进程中使用队列queue为什么会core了呢?

oyxiaoyu0 2009-11-22 01:14:11
我首先定义了一个queue<int> q_client_num;

int start_client(string s_cmd)
{
if(s_cmd=="") return 0;
int client_num=atoi(cmd_ary[1].c_str());

for (int i=1;i<=client_num;i++)
{
//写锁
pthread_rwlock_wrlock(&pOper_Node[i].lock);
int index=i%5;
printf("===%d===\n",index);
pOper_Node[index].q_client_num.push(1); //顾客入队列
//解锁
pthread_rwlock_unlock(&pOper_Node[i].lock);

pid_t pid=fork();
if (pid > 0 )
{
child_proc_num++;
}
else if(pid==0)
{
execl("./client","client",cmd_ary[1].c_str(),(char *)0
exit(0);
}
else
printf("error:fork failure\n");
}
return 0;

}

这样运行后为什么会产生core文件呢?
我把入队列那段加到pid==0里也不行?
...全文
91 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wenxy1 2009-11-22
  • 打赏
  • 举报
回复
"这句就core掉了",是什么意思?
oyxiaoyu0 2009-11-22
  • 打赏
  • 举报
回复
楼上的误解了,我不是看多进程队列。我感觉结构体中应用队列就会有问题呢?
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <queue>

using namespace std;

typedef struct node
{
int oper_status;
int oper_count;
int oper_flag;
char oper_name[10]; //操作员姓名
queue <int> q_client_num; //顾客队列
}OPER_NODE;

OPER_NODE* pOper_Node;

int main(int argc,char* argv[])
{
pOper_Node=(OPER_NODE*)malloc(sizeof(OPER_NODE)*5);
queue <int> q;
q.push(11);
q.push(22);
q.push(33);

pOper_Node[0].q_client_num.push(1);
pOper_Node[0].q_client_num.push(2);
pOper_Node[0].q_client_num.push(3);

printf("%d|\n",(int)pOper_Node[0].q_client_num.size());

return 0;
}
为什么不在结构体定义的q队列就好用。在结构体中定义的q_client_num就不好用了呢程序在pOper_Node[0].q_client_num.push(2);
这句就core掉了。好象只能压一个进去
Wenxy1 2009-11-22
  • 打赏
  • 举报
回复
平凡的思想者 2009-11-22
  • 打赏
  • 举报
回复
把queue放在结构体外面,系统构造这个变量时编译器会调用它的构造函数。
你把malloc改为new试试看,因为malloc不会调用queued的构造函数,问题可能处在这里。
代码改动:
pOper_Node=(OPER_NODE*)malloc(sizeof(OPER_NODE)*5);
改为pOper_Node=new OPER_NODE[5];

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧