文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
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;      
         }
这样就可以了。
相关阅读 更多 +
排行榜 更多 +
僵尸你别拽安卓版

僵尸你别拽安卓版

飞行射击 下载
突击队行动团队最新版

突击队行动团队最新版

飞行射击 下载
仓鼠村庄最新版

仓鼠村庄最新版

模拟经营 下载