linux下利用线程遇到的一个bug
时间:2010-11-29 来源:shenhailuanma
#include <stdio.h> |
zx@zhangxu:~/lianxi/pthread$ ./test |
通过修改代码,进行一系列的测试发现:由于自定义的usleep的时间很短暂,若新线程的工作比较多,则造成线程未执行完便退出了,只输出了残缺的结果。当然这种结果也比较容易理解,毕竟进程由于其他的线程而结束了嘛。
而对于上面的结果,为何要打印两次呢?虽说同族线程共享一个地址空间,但打印两次还是不太理解。
一般来说,在进程退出时,会冲洗IO缓冲。而且对于linux下的线程,它的实现机制非常独特。从内核的角度来说,它并没有线程这个概念,linux把所有线程当做进程来实现,线程被视为与其他进程空想某些资源的进程。每个线程都拥有唯一隶属于自己的task_struct,所以在内核里,它看起来就像是一个普通的进程。
所以,暂时假设为:由于进程退出,主线程和新线程都做了“收尾工作”。