关于多线程的使用,需要添加头文件pthread.h。
注意!!!由于其不是Linux系统默认库,因此编译时需要加上-lpthread参数以调用静态链接库。
关于其大体就是关于两个函数的应用,分别是pthread_create()和pthread_join()函数
###pthread_create()
该函数用来创建线程,它的函数原型是:
#include <pthread.h>
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,
(void*)(*start_rtn)(void*),void *arg);
第一个参数tidp代表指向线程标识符的指针,第二个参数attr用来设置线程属性(可为空),第三参数start_rtn是线程所运行的回调函数,第四个参数是回掉函数的参数(可为NULL)
它的返回值为0代表运行成功,否则返回出错编号
关于其回掉函数的格式:
void *函数名(void *参数名);
###pthread_join()
该函数用来等待指定线程的结束,它的函数原型是:
int pthread_join(pthread_t thread, void **retval);
其中第一个参数thread代表线程标识符,第二个参数retval用来存储回掉函数的返回值(可以为NULL),注意,第二个参数是二级指针
该函数如果成功运行返回0,否则返回错误编号
###注意点
系统默认创建的线程是非分离式的,在非分离式的情况下一个线程结束后其所占用的系统资源并没有真正的释放(也就是说线程并未真正结束),因为我们需要与pthread_join()函数联用才可以确保线程释放
或者采用方法二:设置线程属性为分离式,这样就可以保证线程结束后立即释放所占用的资源。注意!!!设置为分离式的线程不可以用pthread_join()函数等待!!
具体做法如下:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void *run(void *arg) {
printf("ok\n");
}
int main () {
pthread_t thread;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, 1);
pthread_create(&thread, &attr, run, NULL);
sleep(1);
return 0;
}
如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢