初始线程/主线程
1、当c程序运行时,首先运行main函数。在线程代码中,这个特殊的执行流被称作初始线程或者主线程。你可以在初始线程中做任何普通线程可以做的事情。
2、主线程的特殊性在于,它在main函数返回的时候,会导致进程结束,进程内所有的线程也将会结束。这可不是一个好的现象,你可以在主线程中调用pthread_exit函数,这样进程就会等待所有线程结束时才终止。
3、主线程接受参数的方式是通过argc和argv,而普通的线程只有一个参数void*
4、在绝大多数情况下,主线程在默认堆栈上运行,这个堆栈可以增长到足够的长度。而普通线程的堆栈是受限制的,一旦溢出就会产生错误
上篇博客中的代码将41行代码注释掉
//sleep(1);
运行结果变为
看上去显得线程没有创建!这是为什么?
根据上面的描述可以解释这个现象。因为原来有sleep函数可以让原来的主线程延迟1s时间结束,但是去掉后,主线程在print自己的ID后就结束了,同时导致程序的进程结束,而此时其他的子线程可能还没有创建完成,或者没有执行到输出自己ID的语句处。因此看上去新线程没有创建。