pthread线程不是linux系统默认使用的库,因此需要手动连接libpthread.a静态库
g++ xxx.cpp -lpthread -o xx.out
1、创建一个线程
pthread_creat(pthread_t *pthread传出参数传出线程的id, pthread_attr *attr设置线程的属性NULL表示默认属性,void *(*函数指针)(void *),void *arg传给函数的参数);如果创建线程成功则返回0.否则返回错误的编号。
线程执行函数返回值必须为void *,参数必须为 void *
线程id pthread_t其实就是unsigned long
2、获取线程id
pthread_self();
得到当前线程的编号。
3、线程退出。
线程属于进程,如果进程(主控线程)执行完毕生命周期结束,线程也会死亡。为了避免这种情况,可以使用pthread_exit函数,在主控进程中调用此函数,主控进程退出,但是线程不会死亡。pthread_exit(void *(val))当前线程退出,传出参数void *类型的val,当前线程的子线程并不受影响。
4 等待子线程退出,接受退出变量val。
pthread_join(pthread_t 子线程id,void ** val传出参数)
阻塞等待此子线程退出。
5 线程分离
pthread_detach。类似于进程,如果线程死亡,而没有prthread_join来进行收尸,该线程就会变成僵尸线程。如果对此线程进行detach操作,那么此线程就不需要被收尸,死亡后自动销毁。
pthread_detach(pthread_t 线程id);
注意:如果线程detach了,就不能再使用pthread_join在进行收尸,pthread_join 返回值为错误编号,表示回收失败。
6 杀死线程
pthread_cancel(pthread_t线程id)
杀死线程,被杀死的线程仍然需要被收尸。
但是杀死县城并不是立即生效的,在pthread_t被杀死的线程执行函数中,必须要有系统调用函数(取消点,检查点类似于游戏的存档,只能在固定位置存档)。如果线程执行函数中没有系统调用函数。则需要自己加上取消点。pthread_testcancel();执行到这一步,会去检查是否有pthread_cancel要杀死我。
线程操作
最新推荐文章于 2021-09-02 16:15:27 发布