线程控制
来源:互联网 发布:如何破解php源码 编辑:程序博客网 时间:2024/05/16 19:52
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)线程等待均为阻塞式等待;
- 线程控制
- 线程控制
- 线程控制
- 线程控制
- 线程控制
- 控制线程
- 线程控制
- 线程控制
- 控制线程
- 控制线程
- 线程控制
- 线程控制
- 线程控制
- 控制线程
- 线程控制
- 线程控制
- 线程控制
- 线程控制
- ES6语法(6)
- [bzoj] 1082: [SCOI2005]栅栏
- 安卓手机应用获取通讯录中的联系人
- Java接入微信开放平台登录
- 1155: 速算24点
- 线程控制
- 信号处理——Hilbert变换及谱分析
- hibernate的一级缓存
- (77)蓝图事件
- java类的反射的应用
- 一、java的概述(完善中。。)
- jdbc
- Match的React Native入门之旅
- java定义float a = 1和float a = 1f什么区别?