(gdb) n
Single stepping until exit from function __lll_lock_wait,
which has no line number information.
代码片段
while(1){
/*阻塞读*/
printf("========msgid=[%d]",msgid);
iRet = msgrcv(msgid,&sMsg,sizeof(APPMSG),MSGTYPE_REQ,MSG_NOERROR);
if ( iRet == -1){
if ( errno == EINTR )
{
printf("msgrcv Warning:[%s]",strerror(errno) );
continue;
}
}
}
功能说明:
接收消息用于管理子进程(相当于任务管理),当进入中断退出来时候卡住,有时卡在中断处理下一步,有时候卡在continue附近,有时候卡在msgrcv上面,好纠结,在网上查说是死锁。。。
多线程编程需要注意互斥资源的利用,你这个接受函数,本意是使用msgid这个socket进行接受,但是如果他此刻正在被别的线程使用,就会造成死锁,
所以需要查看一个这个msgid是不是一个互斥资源,如果是,不建议你这样写