1.[个人]C++线程入门到进阶(1)----概念
来源:互联网 发布:对数据标准化 编辑:程序博客网 时间:2024/06/03 04:40
1.线程的基本概念、线程的基本状态及状态之间的关系?
线程,有时候被称为轻量级进程,是程序执行流的最小单元;线程被分为两种,用户界面和工作流程(又称后台线程);
线程是进程的一个实体,是被系统独立调度和分派的基本单位;
线程的五种基本状态:新建、就绪、堵塞、运行、死亡;
就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;
运行状态是指线程占有处理机正在运行;
堵塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可行。
每一个程序至少有一个线程,若程序只有一个线程,那就是程序本身。
---------------------------------------------------------------------------------------------------------------------------------------------------
2.线程与进程对比进程是资源分配的基本单位,而线程是程序执行流的最小单位;
通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。
(1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某
进程内的线程在其它进程不可见;
(2)通信:进程间通信IPC(inter-process communication,进程间通信),线程间可以
直接读写进程数据段(如全局变量)来进行通信-需要进程同步和互斥手段的辅助,
来保证数据的一致性;
(3)调度和切换:线程上下文切换比进程上下文切换快得多;
(4)在多线程OS中,进程不是一个可执行的实体。
---------------------------------------------------------------------------------------------------------------------------------------------------
(1)轻型实体:线程中的实体不拥有系统资源,只是有一点点必不可少、能保证独立运行的资源。
(2)独立调度和分派的基本单位:在多线程OS中,由于线程很”轻“,故线程的切换非常迅速且开销小。
(3)可并发执行:在一个线程中的多个线程之间,可并发执行,
允许在一个进程中所有线程都能并发执行;
同样,不同进程中的线程也能并发执行。充分利用了处理机与外围设备并行工作的能力。
(4)共享进程资源:同一个进程中的各个线程,都可以共享该进程所拥有的资源。
所有的线程都具有相同的地址空间(进程的地址空间),线程可以访问其父进程所拥有的已
打开文件、定时器信号量等。
---------------------------------------------------------------------------------------------------------------------------------------------------
(1)工作原理
线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程与父进程的
其他线程共享该进程所拥有的全部资源。
线程可以创建和撤销线程,从而实现程序的并发执行,一般线程具有就绪、运行和堵塞三种基本状态。
每个线程拥有自己的堆栈、程序计数器和自己的局部变量;
进程可以直冲多个线程,它们看似同时执行,但互相之间并不同步。
(2)线程属性
(3)死亡态:当run()方法返回,或别的线程调用stop()方法,线程进入死亡态。
---------------------------------------------------------------------------------------------------------------------------------------------------
(1)派生:线程在进程内派生出来,既可由进程派生,也可由线程派生;
(2)阻塞(block):如果一个线程在执行过程中等待某个事件发生,则被阻塞;
(3)激活(unlock):如果阻塞线程的事件发生,则线程被激活进入就绪队列。
(4)调度(schedule):选择一个就绪线程进入执行状态;
(5)结束(finish):如果一个线程执行结束,它的寄存器上下文及堆栈内容将被释放。
---------------------------------------------------------------------------------------------------------------------------------------------------
6.线程的同步的方式
(1)关键段CS:
(2)互斥量Mutex:
(3)信号量(semaphore):
(4)事件Event:
后续章节介绍。。。。。。
- 1.[个人]C++线程入门到进阶(1)----概念
- 2.[个人]C++线程入门到进阶(2)----线程同步之信号量(semaphore)
- 4.[个人]C++线程入门到进阶(4)----线程同步之事件Event
- 5.[个人]C++线程入门到进阶(5)----线程同步之互斥量Mutex
- 8.[个人]C++线程入门到进阶(8)----经典线程同步与互斥总结
- 9.[个人]C++线程入门到进阶(9)----线程与进程的区别
- 15.[个人]C++线程入门到进阶(15)----线程函数:WaitForSingleObject
- 16.[个人]C++线程入门到进阶(16)----线程函数:CreateThread与_beginthread
- 18.[个人]C++线程入门到进阶(18)----线程函数:SuspendThread
- 19.[个人]C++线程入门到进阶(19)----线程函数:ResumeThread
- 20.[个人]C++线程入门到进阶(20)----线程函数:OpenThread
- 21.[个人]C++线程入门到进阶(21)----线程函数:ExitThread
- 22.[个人]C++线程入门到进阶(22)----线程函数:TerminateThread
- 23.[个人]C++线程入门到进阶(23)----线程函数:GetExitCodeThread
- 24.[个人]C++线程入门到进阶(24)----线程函数:GetCurrentThread
- 6.[个人]C++线程入门到进阶(6)----原子操作 Interlocked系列函数
- 7.[个人]C++线程入门到进阶(7)----多线程中的隐蔽问题揭秘
- 10.[个人]C++线程入门到进阶(10)----多线程经典面试题
- 《机器学习实战》第五章:Logistic回归(1)基本概念和简单实例
- Android开发——带你彻底理解 Window 和 WindowManager
- pyCharm破解
- 70. Climbing Stairs
- web连接数据库时,报空指针java.lang.NullPointerException问题--可能的解决方式
- 1.[个人]C++线程入门到进阶(1)----概念
- Windows10 TensorBoard 运行出现 No scalar data was found问题解决
- Bootstrap轮播图
- 信息系统项目管理知识--信息系统建设
- 自定义ListView实现任意View跑马灯效果
- Binary Tree Postorder Traversal
- python爬网页存入本地文件
- 斐波那契dp
- springMVC其实跟JSPMVC大同小异