Q:线程的定义及其组成?
A:线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位。线程本身不拥有系统资源,但它可与同一进程的其他线程拥有该进程的所有资源。
一个线程包括以下内容:1.一个指向当前被执行指令的指令指针;2.一个栈;3.一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值;4.一个私有的数据区。
Q:为什么在引进进程之后还引进线程?
A:需要多线程的原因是:
1. 在许多应用中会同时发生多种活动,某些活动会随着时间的推移被阻塞,通过将这些应用程序分解成可以准并行运行的多个顺序线程。线程作为新元素,其拥有并行实体共享同一个地址空间和所有可用数据的能力。
2. 线程较之进程更易创建和撤销,在有大量线程需要动态和快速修改时,这一特性很重要。
3. 在一些需要大量I/O处理和大量计算的情况下,拥有多线程允许这些活动彼此重叠进行,对程序性能的提升是非常明显的。
4. 在多CPU系统中,多线程是有益的,在这样的系统中,可以真正实现物理上的多线程并行运行。
*线程概念试图实现的是共享一组资源的多个线程的执行能力,以便这些线程可以为完成某项工作而共同工作。
Q:多线程开发?
A:多线程开发的最基础概念主要包括三点:线程,互斥锁,条件。线程操作又分为线程的创建,退出,等待三种;互斥锁操作又分为创建,销毁,加锁,解锁四种操作;条件操作有创建,销毁,触发,广播和等待五种操作。
Q:线程属性?
A:线程具有以下属性,其结构如下:
Typedef struct
{
int detachstate; //线程的分离状态
int schedpolicy; //线程调度策略
int inheritsched; //线程的继承性
struct sched_param schedparam; //线程调度参数
int scope; //线程的作用域
size_t guardsize; //线程栈末尾的警戒缓冲区大小
int atackaddr_set;
void * stackaddr; //线程栈的位置
Size_t stacksize; //线程栈的大小
}pthread_attr_t;
Q:线程同步机制?
A:通过互斥锁可以实现对线程之间资源竞争的合理安排。