多线程编程的总结和范例
本文内容主要从http://blog.csdn.net/column/details/killthreadseries.html转载而来,作为学习并整理自己的一些想法。
一.概念性问答题
- 线程的基本概念、线程的基本状态及状态之间的关系?
线程是进程中的一个实体,是被系统独立调度和执行的基本单位。
线程,有时称为轻量级进程,是CPU使用的基本单元;它由线程ID、程序计数器、寄存器集合和堆栈组成。它与属于同一进程的其他线程共享其代码段、数据段和其他操作系统资源(如打开文件和信号)。
线程有四种状态:新生状态、可运行状态、被阻塞状态、死亡状态。
2.线程与进程的区别?
(1) 线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。
(2) 一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。
(3) 系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。那就是说,除了CPU之外(线程在运行的时候要占用CPU资源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
(4) 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少。
(5) 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
3.多线程有几种实现方法,都是什么?
(1)继承 Thread 类
(2)实现 Runnable 接口再 new Thread(YourRunnableOjbect)
4.多线程同步和互斥有几种实现方法,都是什么?
(1)Critical Sections[关键区域、临界区域]
Critical Sections并不是核心对象,存在于进程的内部空间中。使用时将一个类型为CRITICAL_SECTION的局部变量初始化即可。
CRITICAL_SECTION qCriticalSection; void CreateDeletCriticalSection() { InitializeCriticalSection(&qCriticalSection); //do something here DeleteCriticalSection(&qCriticalSection); }
//结合win32多线程编程学习中,待有收获继续更新