- 线程的基本概念:
- 1、线程实质上是
轻量级的进程
; - 2、引入线程后,线程替代进程,成为
系统调度的基本单位
; - 3、线程
不会分配
内存空间,一个进程中的多线程
是共用进程的内存空
间; - 4、多线程
没有
多进程安全
,一个线程结束,其余的线程都不能执行; - 5、多线程比多进程的
效率更高
,线程间资源共享
; - 6、编写代码时,需要添加头文件(
#include<pthread.h>
); - 7、编译时,需要链接线程库(
gcc xxx.c -lpthread
); - 8、同进程一样,进程也是
时间片轮转
,上下文切换
; - 线程的状态:
- 1、
结合态
:所有的线程默认是结合态
,结合态的线程必须由其他线程调用pthread_join函数
回收资源; - 2、
分离态
:使用pthread_detach函数
,将线程设置成分离态
,线程结束后由OS自动回收资源
; - 相关的API:
- 一、创建线程:
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
/*
参数:
thread: 创建的线程的线程号
attr: 线程属性 传 NULL 表示使用默认属性
start_routine: 线程处理函数--线程体
arg: 线程处理函数的参数
返回值:
成功 0
失败 错误码
*/
- 二、返回当前线程的线程号:
#include <pthread.h>
pthread_t pthread_self(void);
/*
返回值:
总是成功 当前线程的线程号
*/
- 三、退出线程:
#include <pthread.h>
void pthread_exit(void *retval);
/*
参数:
退出线程时的返回值 给 pthread_join 使用的
返回值:
无
*/
- 四、阻塞等待一个结合态的线程退出,回收资源:
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
/*
参数:
thread:线程的id
retval:接受pthread_exit返回的值的 如果不关心 传NULL即可
返回值:
成功 0
失败 错误码
*/
- 五、将线程设置成分离态:
#include <pthread.h>
int pthread_detach(pthread_t thread);
/*
参数:
thread:线程的id
返回值:
成功 0
失败 错误码
*/
- 六、pthread_cancel函数:
#include <pthread.h>
int pthread_cancel(pthread_t thread);
/*
功能:
给线程发一个取消信号
线程能否被取消以及能否被立即取消取决于线程的 state 和 type
也就是与下面两个函数有关
7.pthread_setcancelstate函数
8.pthread_setcanceltype函数
参数:
thread:线程的id
*/
//7.pthread_setcancelstate函数
int pthread_setcancelstate(int state, int *oldstate);
/*
参数:
state: PTHREAD_CANCEL_ENABLE //可被取消(默认状态)
PTHREAD_CANCEL_DISABLE //不可被取消
oldstate: 可传参NULL
*/
//8.pthread_setcanceltype函数
int pthread_setcanceltype(int type, int *oldtype);
/*
参数:
type: PPTHREAD_CANCEL_ASYNCHRONOUS //可被立即取消(默认状态)
PTHREAD_CANCEL_DEFERRED //不可被立即取消
oldtype: 可传参NULL
*/