Linux线程的简单理解2

创建线程

pthread_create()
函数第一个参数执行一个虚拟内存单元,该内存单元的地址即为新创建线程的线程ID,属于NPTL线程库的范畴。线程库的后续操作,就是根据该线程的ID来操作线程的。

结束线程

1.让线程入口函数执行结束。(主要使用的结束方式)与进程一样
2.pthread_exit 让本线程结束,pthread_exit 参数是一个void* 表示进程结束的返回值,很少用,一般参数为NULL。终止自己。
3.pthread_cancel 让任意一个线程结束。(本进程中的线程)让新线程结束!终止同一个进程中的另一个线程。
4.kill任何一个进程,让线程也就结束了

线程等待
为什么要线程等待?

  • 已经退出的线程,其空间没有被释放,仍然在进程的地址空间内
  • 创建新的线程不会复用刚才退出线程的地址空间
pthread_join()
调用该函数的线程将挂起等待,知道id为thread的线程终止。
目的和进程等待类似,防止出现类似僵尸进程的内存泄漏的情况

分离线程

  • 默认情况下,新创建的线程是需要进行回收的,线程退出后,需要对其进行pthread_join操作,否则无法释放资源,从而造成系统泄漏。调用pthread_join的线程是要挂起等待的。
  • 如果不关心线程的返回值,join是一种负担,这个时候,我们可用告诉系统,当线程退出时,自动释放线程资源。
pthread_detach(pthread_self());
类似于忽略SIGCHLD信号,线程分离后,就不需要pthread_join来显示回收了。

线程不是越多越好,达到一定程度,cpu已经全部达到上限之后,此时线程数如果继续增多,非但不能提高效率,反而会降低效率(线程多了,调度开销也就更大,效率也就会受到影响)

线程有几个?先看是cpu密集型还是io密集型
到底搞几个线程呢?线程数目和工作的任务类型有关,究竟有多少个合适,要通过测试的方法来判断。

线程异常
单个线程如果出现除零,野指针问题导致线程崩溃,进程也会随着崩溃。
线程是进程的执行分支,线程出现异常,就类似进程出现异常,进而触发信号机制,终止进程,进程终止,该进程内的所有线程也就随之退出。

线程用途
合理使用多线程,能够提高CPU密集型程序的执行效率
合理使用多线程,能够提高IO密集型程序的用户体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值