【后台开发】【线程 | 进程】多线程

本文详细介绍了多线程的概念、创建与结束,包括pthread_create、pthread_exit、pthread_join的用法,强调了pthread_join在资源回收中的重要作用。还探讨了线程的分离状态、多线程重入的概念以及线程池的使用,以提高系统性能。
摘要由CSDN通过智能技术生成

多线程就是允许一个进程中存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行。

多线程函数需要包含头文件:include<pthread.h>

1. 线程的创建

线程创建函数:pthread_create原型如下:
int pthread_create(pthread_t *thread, const pthread_attr_t, void* (*start_routine) (void*), void *arg);

第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,第四个参数是运行函数的参数。

pthread_create函数的返回值:若线程创建成功,则返回0;若创建失败,则返回出错编号,并且*thread中的内容是未定义的。

2. 线程的结束

线程的结束有两种:1. 函数已经结束,调用它的线程也就结束了;2. 通过函数pthread_exit来实现。

pthread_exit函数原型:void pthread_exit (void *retval);
参数是函数的返回值,可由其他函数如pthread_join获取。

pthread_join函数用来等待一个线程的结束,其原型:pthread_join (pthread_t thread, void **retval);
第一个参数为被连接(等待)线程的线程标识符,第二个参数为指向一个指向被等待线程的返回值的指针的指针。

  • 调用pthread_join的线程将被挂起直到参数thread所代表的线程终止,当前线程才会继续开始执行。即:pthread_join是一个线程阻塞函数,调用它的函数将一直等到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。
pthread_join和pthread_exit的用法:
  1. pthread_join一般是主线程调用,用来等待子线程退出。因为是等待,所以是阻塞的,一般主线程会依次添加所有它创建的子线程。
  2. pthread_exit一般是子线程调用,用来结束当前线程。
  3. 子线程可以通过pthread_exit传递一个返回值,而主线程通过pthread_join获得该返回值,从而判断该子线程的退出是正常还是异常。
pthread_join的作用:

线程终止最重要的问题是资源释放的问题。终止的线程所占用的资源不会随着线程的终止而归还系统,而是仍为线程所在的进程持有。一个非分离的线程所占的资源仅当有线程对其执行了pthread_join后才会释放。所以为了防止内存泄漏,所有线程终止时要么被设置为分离状态,要么使用pthread_join来回收资源。

可以看出pthread_join有两个作用:

  1. 用于等待其他线程结束:当调用 pthread_join() 时,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值