Linux--线程【菜鸟学习日记】

时间:2022-08-14 04:59:05

     线程与进程一样,具有创建、退出、取消和等待等基本操作,可以独立完成特定事物的处理;线程同样有自己的特有属性,如线程也有唯一标识自己的线程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分配的,不能在线程的栈上分配,因为当其它线程得到这个返回的指针时,线程函数已经退出了


线程等待

Linux--线程【菜鸟学习日记】

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,失败返回错误码