创建一个线程:
int pthread_creat(pthread_t *threadID, const pthread_attr_t *attr,
void *(×start_routine)(void *), void *arg);
start_routine:(程序)进入点,这个单词从概念上说明了,不同的线程是同一程序的不同执行点。
获得线程ID:
pthread_t pthread_self(void);
退出线程:
void pthread_exit(void *retval);
将新创建的线程加入到原进程中:
int pthread_joid(pthread_t th, void **thread_return);
这个函数类型wait, waitpid, 在Linux的内核看来(这个是Linux的实现范畴),线程只是共享资源的进程,调度算法是一样的,也占据着进程表项,所以当线程退出执行的时候,就有可能变成类似Zombie进程。
关于退出线程和聚合线程,还有一点需要说明,就是传递的参数。因为线程拥有自己的栈,所以使用线程的局部变量返回,是错误的。
而讨论到return和pthread_exit(NULL)的区别:
“理论上说,pthread_exit()和线程宿体函数退出的功能是相同的,函数结束时会在内部自动调用pthread_exit()来清理线程相关的资源。但实际上二者由于编译器的处理有很大的不同。
在进程主函数(main())中调用pthread_exit(),只会使主函数所在的线程(可以说是进程的主线程)退出;而如果是return,编译器将使其调用进程退出的代码(如_exit()),从而导致进程及其所有线程结束运行。”
所以呢,在宿体函数内是没有区别的(理论上);但是在宿主函数内,return将结束进程。