Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 什么';对于多进程,gdb和实际操作系统环境的确切区别是什么?_Linux_Multithreading_Gdb_Scheduled Tasks - Fatal编程技术网

Linux 什么';对于多进程,gdb和实际操作系统环境的确切区别是什么?

Linux 什么';对于多进程,gdb和实际操作系统环境的确切区别是什么?,linux,multithreading,gdb,scheduled-tasks,Linux,Multithreading,Gdb,Scheduled Tasks,我一直在调试多进程的工作。在程序初始化时创建多个线程。我发现,当我使用gdb进行调试时,所有线程都可以成功设置,但当我在linux环境中直接执行程序时,它会在创建部分线程后阻塞。我想这一定是线程睡眠和唤醒之间的时间安排问题,但还没有弄清楚 尽管gdb可以成功地创建线程,但在线程自行终止后,它会因glibc函数中出现意外的分段错误而退出: res_init.c:642处的res_thread_freeres() 642如果(_res.nscount==0) 这也是因为我可以检查_res.nsco

我一直在调试多进程的工作。在程序初始化时创建多个线程。我发现,当我使用gdb进行调试时,所有线程都可以成功设置,但当我在linux环境中直接执行程序时,它会在创建部分线程后阻塞。我想这一定是线程睡眠和唤醒之间的时间安排问题,但还没有弄清楚

尽管gdb可以成功地创建线程,但在线程自行终止后,它会因glibc函数中出现意外的分段错误而退出:
res_init.c:642处的res_thread_freeres() 642如果(_res.nscount==0) 这也是因为我可以检查_res.nscount的值,它没有完全溢出

所以。。有人知道实际操作系统和gdb调试环境之间的执行差异吗?谢谢

更新:
我已经找到了将pthread设置为SCHED_FIFO的问题,在我删除它之后,它工作正常。但是我仍然不知道为什么这个程序在gdb环境中工作得很好。。实际上,程序的线程状态在连接到gdb的那一刻就发生了更改。

如果您的程序存在争用条件,则可能会表现出依赖于时间的行为。很难说得更具体些。尝试在关键的地方引入随机睡眠,看看行为是否改变;如果出现这种情况,几乎可以肯定这是一种竞争条件,或者可能是某种其他类型的同步错误。谢谢@n.m。我发现这是因为其中一个FIFO线程从不休眠,这可能会导致挂起,因为一旦我强制线程休眠,程序就会正常工作。但奇怪的是,我已经将每个线程绑定到不同的cpu上,我认为这不应该导致争用状态。争用状态是由对共享资源的不同步访问引起的,它们发生在所有cpu配置中。