线程与进程一样,具有创建、退出、取消和等待等基本操作,可以独立完成特定事物的处理;线程同样有自己的特有属性,如线程也有唯一标识自己的线程ID,但线程占用更少的资源
什么是线程?线程的定义
简单来说线程就是进程中的一个执行流,更准确来说:线程是“一个进程内部的控制序列”
- 进程是资源竞争的基本单位
- 线程是程序执行的最小单位
线程的优点
线程的缺点
创建线程
int pthread_create(pthread_t *newthread,
const pthread_attr_t *attr,
void*(*start_routine)(void*),
void *arg);
//newthread:线程ID
//attr:设置线程的属性,主要设置与栈相关的属性,一般情况下设置为NULL,使用系统默认属性
//start_routine:线程运行的代码起始地址,就是要运行的那个函数
//arg:运行函数的参数地址。如果需要传入多个参数,则需要使用一个包含这些参数的结构体地址
返回:成功返回0,失败返回非0
线程的退出
//线程退出,终止
void pthread_exit(void *retval);
注意:pthread_exit()返回的指针所指向的内存空间必须是全局的或者malloc分配的,不能在线程的栈上分配,因为当其它线程得到这个返回的指针时,线程函数已经退出了
线程等待
int pthread_join(pthread_t thread,viod **thread_return);
//thread:被等待的线程id
//thread_return:用户自定义的指针,
//指向一个保存等待线程的完整退出状态的静态区域,它可以用来存储被等待线程的返回值
此函数将调用该函数的线程挂起,直到id为thread的线程退出。
被等待的(thread)线程以不同的方法终止,通过pthread_join得到的终止状态是不同的:
- 如果thread线程通过 return返回 ,value_ptr所指向的单元⾥里存放的是thread线程函数的返回值。
- 如果thread线程被别的线程调⽤ pthread_cancel异常终止 ,value_ptr所指向的单元⾥里存放的是常数PTHREAD_CANCELED。
- 如果thread线程是⾃己调⽤用 pthread_exit终⽌ 的,value_ptr所指向的单元存放的是传给pthread_exit的参数。
- 如果对thread线程的终⽌止状态不感兴趣,可以传NULL给 value_ptr 参数。
取消线程
//取消一个线程
int pthread_cancel(pthread_t thread);
thread:线程id
返回:成功返回0,失败返回错误码