linux下线程总结
Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,链接时需要使用库libpthread.a。
线程创建函数:int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg);//此处的线程ID即pthread_t 型通常定义一个局部变量的pthread_t 型然后将地址代入即可,第二个参数通常为null,第三个参数为被调用的函数的指针,第四个参数为被调用的函数的参数例:pthread_create(&tid1,NULL,thr_fn1,(void *)1);
终止线程函数(可用return 语句代替):void pthread_exit(void* rval_ptr);//参数为被调用的线程函数return的值,如果不需要该值则使用NULL代入即可
关于执行函数的返回值是(void *)类型,函数真的能返回一个指针?暂且就管它是任意类型的数据好了。
关于pthread_exit和return的区别:如果线程是return退出的则不会调用被pthread_cleanup_push压进的函数,如果是异常退出或者pthread_exit退出则都会运行被pthread_cleanup_push压进且没有被pop出来的函数
阻塞等待线程终止函数:int pthread_join(pthread_t thread, void **value_ptr);//参数一为线程ID,参数二为线程参数返回值
线程防意外清理函数:void pthread_cleanup_pop(int execute); void pthread_cleanup_push(void (*routine)(void*), void *arg);//一个是压入一个是推出,再没有将函数推出来之前线程就已经意外结束了的将运行被压进去的清理函数。pthread_cleanup_pop中的execute参数为当推出清理函数时运行清理函数与否的标志位,为1则运行为0则不运行。
浙公网安备 33010602011771号