多线程 - 系统创建的附加线程
multithread - additional thread created by the system?
我正在将gdb
附加到正在运行的进程(我的多线程服务器)。然后我请求info thread
,并看到总是有 +1(或 2?)额外的线程,我没有在我的代码中创建。我只创建了:
- 4名工人(必须在
cond_wait()
) - 1 个信号线 ( 始终在
sigwait()
处 ) - 1 个维护线程(每 N 秒执行一次,然后
cond_wait()
状态) - 1 个使用
popen()
的线程(每 N 秒执行一次,然后cond_wait()
状态) - 1
main()
螺纹(accept()
时)
所以, = 我创建的 8 个线程。但为什么报告9或10???
系统是 FreeBSD 6.4
另外,这个附加线程总是有问题,它使我的程序崩溃,并且始终处于pthread_testcancel ()
状态!C++ pthreads - 尝试锁定互斥锁进行读取时崩溃
似乎,标记为*
线程编号 10 当前正在执行线程? 它与 8 个线程相同???或者我有 2 个额外的线程?正常吗?谢谢。。对不起,我的英语不好。
(gdb) info thread
* 10 LWP 100108 0x4865a79b in pthread_testcancel () from /lib/libpthread.so.2 ( WHAT IS ??? (1) )
9 Thread 0x80d4000 (runnable) 0x486d7bd3 in accept () from /lib/libc.so.6
8 Thread 0x80d4a00 (LWP 100090) 0x4865a79b in pthread_testcancel ()
from /lib/libpthread.so.2 ( WHAT IS??? (2) )
7 Thread 0x80d4c00 (sleeping) 0x48651cb6 in pthread_mutexattr_init ()
from /lib/libpthread.so.2
6 Thread 0x80d4e00 (sleeping) 0x48651cb6 in pthread_mutexattr_init ()
from /lib/libpthread.so.2
5 Thread 0x868b000 (sleeping) 0x48651cb6 in pthread_mutexattr_init ()
from /lib/libpthread.so.2
4 Thread 0x868b200 (sleeping) 0x48651cb6 in pthread_mutexattr_init ()
from /lib/libpthread.so.2
3 Thread 0x868b400 (sleeping) 0x48651cb6 in pthread_mutexattr_init ()
from /lib/libpthread.so.2
2 Thread 0x868b600 (sleeping) 0x48651cb6 in pthread_mutexattr_init ()
from /lib/libpthread.so.2
1 Thread 0x868b800 (sleeping) 0x48651cb6 in pthread_mutexattr_init ()
from /lib/libpthread.so.2
其他线程是第三方库的结果。 快速搜索curl,ImageMagick,tinyxml2和pcre的源代码显示curl和ImageMagick有pthread_create()
调用。
关于在 gdb 中调试:
- 在
info threads
中,*
表示当前正在检查的线程。 它不指示当前正在运行的线程。 - 在回溯中,
in ?? ()
可以指示库不是使用调试信息构建的(-g
使用 gcc)或堆栈已损坏。 通常,如果堆栈已损坏,gdb 会给出明确的指示。
另外,请务必查看 ImageMagick 的执行文档线程。
相关文章:
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- C++ 线程创建/删除与线程停止/恢复
- Qt - 如何从线程创建 QFuture
- 我可以使用Qt线程ID为每个线程创建唯一的缓存吗?
- 零MQ 后台线程创建
- OpenMP 线程创建
- GLFW & ImGui:从 main 以外的线程创建 ImGui 控件
- 对象:无法为位于不同线程中的父线程创建子级
- C++ 11:线程创建给我一个"Attempt to use a deleted function"错误
- C 的周期性线程创建
- MPI - 当数组初始化值必须为常量时,如何为工作线程创建部分数组
- 当主GUI线程被阻塞时,如何从工作线程创建无模式对话框
- 多个线程创建5个线程来计算质数
- 为线程创建模板
- 线程创建,CRT和DLL是如何完成的?
- 同步线程创建和销毁(静态)对象
- 竞争条件:一个线程创建静态对象,另一个线程在初始化完成之前使用它.如何处理
- 从不同线程创建QMainWindow
- QFuture 无法为位于不同线程中的父线程创建子级
- ( QNativeSocketEngine)QObject:无法为位于不同线程中的父线程创建子级