Linux下C语言多线程编程学习一
简单实现多线程需要用到 pthread_create函数和pthread_create函数。先上例子再做解释。
#include <stdio.h> #include <pthread.h> #include <stddef.h> void thread(void){ int i; for(i=0;i<60 ; i++){ printf("这是子线程!\n"); sleep(1); } } int main(void){ pthread_t id; int i,ret; ret = pthread_create(&id,NULL,(void *)thread,NULL); if(ret!=0){ printf("创建新显存错误!\n"); exit(1); } for(i=0;i<50;i++){ printf("这是主线程.\n"); sleep(1); } pthread_join(id,NULL); printf("两个线程都已经运行结束.\n"); return 0; }
Linux下多线程需要用到pthread.h头文件,所以在代码的开始处引入了头文件。在例子中使用到了NULL,所以我们也引入了stddef.h头文件。接下来我们从main函数开始分析代码。
pthread_t是一个多线程标识符,在pthreadtypes.h中申明,
typedef unsigned long int pthread_t;用来记录线程ID的。
pthread_create函数在pthread.h中声明,如果创建线程成功则返回0,如果返回线程失败则返回非零。
pthread_create函数有四个参数,第一个参数为指向线程标识符的指针,就是我们前边申明的pthread_t id。第二个参数用来设置线程属性,线程属性在下一篇文章中介绍。第三个参数是线程运行函数的起始地址,例子中的多线程函数为thread函数,所以在这里就传入thread函数的地址。最后一个参数是运行函数的参数,例子中thread无参数,所以此处传入NULL。
pthread_join函数同样在pthread.h中声明,是用来等待一个线程的结束,一般情况线程结束之后需要统一回收资源。pthread_join的第一个参数是需要等待结束的现场ID,其类型为pthread_t,第二个参数是用来存储线程结束后的返回值。
连接时需要使用库libpthread.a,所以在编译必须在选项中加入 -lpthread 选项,例如
gcc main.c -lpthread -o main.o.