日期:2014-05-16  浏览次数:20689 次

在创建linux线程时为什么会多一个线程?
我写了一个测试程序,在主线程(main())里面创建了一个新线程(void *task(void *unused)),让他们一直执行.然后打印他们的pid.最后生成test可执行文件
运行./test发现打印结果是main()线程的pid是1902,task线程的pid是1904.
然后使用top命令查看系统信息,发现在test命令下有三个线程pid分别是1902 1903 1904,其中两个正好对应我建立的线程,但是中间那个线程是如何建立的?有什么特别作用?

------解决方案--------------------
先纠正几个错误.
1. 你所说的1902, 1904应该是tid, 即thread id, 是用pthread_self()函数获得的.
2. pid是process id, 指的是进程ID, 通过getpid()函数获得.

好了, 现在说你的问题, 先后创建的两个线程, 他们的tid不一定非得是连续的. 那个1903是什么并不重要, 你查看1903的pid是否和1902, 1904的pid一样, 如果不一样就忽略它, 因为它和你没关系, 如果一样, 就是你的程序问题.