文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>用gdb调试多线程程序,没有改变信号量但是执行了s..

用gdb调试多线程程序,没有改变信号量但是执行了s..

时间:2009-08-22  来源:rain_fish

近期在调试epoll程序时发现用GDB时收不到消息,但是只执行程序是没有问题的,感觉很奇怪。经过输出日志的情况下跟踪程序,发现不是epoll的问题,而是信号量。上网一查发现这个问题确实存在,具体描述如下:     不调试运行正常,一个线程sem_wait()等待别的线程执行sem_post(),但是  
  用gdb调试运行时,本应等待的线程执行了后面的代码导致错误。
  原因是:在GDB调试环境下sem_wait()总是被触发,但是errno是EINTR(系统中断),这是需要屏蔽EINTR,具体操作代码是:         int ret = 0;
        while (0 != (ret = sem_wait(&(_readyfds.sem_write))))               
        {                       
                if (errno == EINTR)
                        continue; 
                else                      return -1;      
         }
这样就可以了。
相关阅读 更多 +
排行榜 更多 +
Turnip Boy Robs a Bank

Turnip Boy Robs a Bank

冒险解谜 下载
登山卡丁车

登山卡丁车

体育竞技 下载
钉子户大战拆迁队疯狂版下载

钉子户大战拆迁队疯狂版下载

休闲益智 下载