多线程 - 系统创建的附加线程

multithread - additional thread created by the system?

本文关键字:线程 创建 系统 多线程      更新时间:2023-10-16

我正在将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 的执行文档线程。