头文件 #include <pthread.h>
线程的创建 pthread_create()
线程的退出 pthread_exit()
等待线程的退出 pthread_join()
#include <stdio.h> #include <stdlib.h> #include <pthread.h> void thread() { printf("This is child thread!\n"); return ; } int main() { pthread_t id; int ret; ret = pthread_create(&id, NULL, (void *)thread, NULL); //创建线程(第一个参数是线程号;第二个参数为线程属性,一般置为NULL;
//第三个参数为线程要调用的函数的首地址;第四个参数为传递给线程函数的参数) if(ret != 0) { perror("pthread_create."); exit(1); } printf("This is main thread!\n"); pthread_join(id, NULL); //等待线程结束 printf("Child thread return.\n"); return 0; }执行结果:
This is main thread!
This is child thread!
Child thread return.
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <pthread.h> void* thread(int num) { printf("This is chlid thread!\n"); num *= 2; //return (void *)num; pthread_exit((void *)10); } int main() { pthread_t id; int ret; void *result; ret = pthread_create(&id, NULL, (void *)thread, (void *)5); if(ret != 0) { perror("pthread_create"); exit(1); } printf("This is main thread!\n"); pthread_join(id, &result); //第二个参数为void ** 型,用来取得线程退出信息。 printf("Child thread return %d.\n",(int)result); return 0; }
执行结果:
This is main thread!
This is chlid thread!
Child thread return 10.
对于线程函数来说,调用return和pthread_exit()都将使该线程返回。但return所做的是函数返回(在线程结束的时候会自动调用pthread_exit()来释放线程所占用的资源,包括主线程),而phtread_exit()则显式的释放空间并设置了返回值。pthread_exit()属于线程退出函数,但renturn不是。
两者都会将退出的值放到pthread_join(id, void **)中的第二个参数所指向的地址里,主线程也就获得了子线程返回的信息。
关于线程的操作还有一些函数:
int pthread_detach(pthread_t tid) //使该线程从进程中分离(分离后线程会自动释放资源)
int pthread_cancel(pthread_t tid) //用来取消一个线程
void pthread_cleanup_push(void (*rtn)(void *), void *arg); //用来设置线程的清理程序
void pthread_cleanup_pop(int execute);
更多信息参考:
http://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part4/
http://blog.chinaunix.net/uid-23193900-id-3193923.html