LINUX学习笔记17——多线程
2652 点击·0 回帖
![]() | ![]() | |
![]() | 1. 线程理论基础: a) 比进程更节俭:线程所有代码数据都是共享的 b) 方便:因为数据共享,所以通信方便 c) 遵循POSIX线程接口,称为pthread,需要#include<pthread.h> 2. 创建线程:int pthread_create(pthread_t *tidp, const pthread_attr *attr, void *(start_rtn)(void), void *arg) a) Tidp:用来获取创建线程的ID b) Attr:线程属性,一般为NULL c) Start_rtn:线程要执行的函数,函数执行完了,线程也就完了! d) Arg:start_rtn的参数,注意是空指针变量,使用时需要进行类型强制转换。 e) 编译:Pthread的库不是LINUX系统的库,编译时需要加上, 1. #gcc filename –lpthread:l指定自己加的库 f) 注意:线程优先共享全局变量,共享数据段!而局部变量处于堆栈处,不共享。 3. 线程终止: a) 程序从启动历程中返回。 b) 线程可以被另一个进程终止。创建线程的进程结束了,线程也就结束了。 c) 线程自己调用pthread_exit函数:void pthread_exit(void *rval_ptr) 1. #include<pthread.h> 2. rval_ptr:获取线程退出返回值的指针 4. 线程等待:int pthread_join(pthread_t tid, void **rval_ptr) a) 作用:等待某个线程结束后再进行主程序。 b) #include<pthread.h> c) Tid:线程ID号 d) Rval_ptr:线程返回值的指针,就看你是否需要返回值,不需要填NULL e) 注意:创建线程后处于就绪态,需要主进程有线程等待的时间,线程才能有时间运行。 5. 获取线程ID: pthread_t pthread_self(void) a) #include<pthread.h> 6. 退出保护: a) 当程序非正常退出时,清除栈空间。 b) void pthread_cleanup_push(void (*rth)(void *), void *arg) 1. #include<pthread.h> 2. 用push函数和pop把程序段括起来 3. 将清除函数压入清除栈,当被括程序没运行到POP就退出时,调用清理函数,不包括return。如果有多条PUSH时,先进后出 4. Rtn:清除函数 5. Arg:清除函数的参数 c) void pthread_cleanup_pop(int execute) 1. #include<pthread.h> 2. 将清除函数弹出清除栈 3. Execute:决定是否在弹出清理函数的同时执行该函数,非0:执行;0:不执行 d) 清除函数:就是自己定义的内容,最主要的是得有return语句 | |
![]() | ![]() |