线程控制

本文介绍了线程的基本概念,线程的共享与私有资源,以及线程与进程的联系和区别。重点讨论了线程控制,包括创建、终止和等待线程的方法,并提供了相关代码示例。强调了在多线程编程中避免使用exit函数终止线程的重要性,提倡使用pthread_exit等安全方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       1.线程简介:一个进程的地址空间中执行着多个线程。同一个进程的多个线程共享着同一地址空间,因此代码和数据都是共享的,若定义一个函数,在各线程中都可以调用,若定义一个全局变量,在各线程中都可以访问到。

   线程有自己共享的资源,也有自己私有的资源;

   线程共享资源:文件描述符表、每种信号的处理方式(SIG_IGN或自定义的信号处理函数)、当前工作目录、用户id和组id

   线程私有资源:上下文信息(包括各种寄存器的值、程序计数器和栈指针)、栈空间、线程id、调度优先级、信号屏蔽字

   对线程和进程的几点说明:

  (1)线程是调度的基本单位

  (2)linux下的进程称为轻量级进程

  (3)linux下无真正意义上的线程,其线程用进程模拟实现;

   线程与进程的区别及联系

   联系:进程和线程都是由操作系统所提供的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性

区别:(1)线程的划分尺度小于进程,使得多线程程序的并发性高;(2)进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率;(3)从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配,而是将其看做一个独立的进程;

2.线程控制:包括创建线程、终止线程和线程等待;使用第三方库,遵循POSIX标准;

创建线程:

线程等待:

(1)多线程情况下,任何一个线程异常退出,均导致当前进程异常退出,无意义;(2)对于线程等待,我们关心线程正常退出,结果正确或线程正常退出,结果不正确这两个研究方向;(3)调用线程等待函数pthread_join()函数,均为阻塞式等待

程序代码如下:


测试结果:


终止线程:实现线程终止,有三种方法:(1)使用pthread_exit()函数,可终止线程,不影响进程的运行,注意:若在线程中调用exit()函数,则会终止进程的执行(原因:进程终止后,会回收所有的资源,会导致未被终止的线程终止,禁用exit()终止线程);(2)调用pthread_cancel()函数,可取消线程的执行,线程可被主线程取消,也可自己取消自己,若取消成功,则会返回常数-1(查看可得:#define PTHREAD_CANCELED ((void*)-1));(3)使用 return (void*)退出码 这种方式终止线程;

程序代码如下:


测试:


程序代码如下:


测试:


对于以上线程控制有如下几点说明:

(1)多进程彼此独立执行,其稳定性强于多线程;

(2)在进行线程终止时,切记:不要使用exit终止线程;若想要终止进程,可在线程中调用exit函数;

(3)有三种方式可进行线程终止;

(4)线程等待均为阻塞式等待;







    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值