1.何谓线程
线程是进程的一个实体,死cpu调度很分派的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点运行中必不可少的资源,但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
2.一个线程包含的内容
1.一个指向当前被执行命令的指令指针。
2.一个栈
3.一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值。
4.一个私有的数据区。
3.为什么要引入线程的概念
1.在许多应用中会同时发生多种活动,某些活动会随着时间的推移被阻塞,通过将这些应用程序分解成可以准并行运行的多个顺序线程,程序设计模型会变得简单起来。
2.由于线程比进程更轻量级,所以他们更容易(更快)创建和撤销,在一般情况下,创建一个线程比创建一个 进程要快上10到100倍,在有大量线程需要动态和快速修改时,具有这一特性是非常重要的。
3.在性能方面,若多个线程都是cpu密集型,那么多线程并不能很明显地体现出它的性能提升,但是在一些需要大量IO处理和大量计算的情况下,拥有多线程允许这些活动被彼此重叠进行,对程序性能的提升是非常明显的。
4.在多cpu系统中,多线程是有益的,在这样的系统中,可以真正实现物理上的多线程并行运行。
4.多线程的优点
1.多线程使得程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态。
2.当前没有进行处理的任务时可以将处理器的时间让给其他任务。
3.占用大量处理时间的任务可以定期将处理器时间让给其他他任务
4.可以随时停止任务
5.可以分别设置各个任务的优先级一优化性能
5.什么情况下最适合用多线程处理
1.耗时或大量占用处理器任务阻塞用户界面操作
2.各个任务必须等待外部资源(如远程文件或Internet连接)
6.多线程开发的最基本概念
1.线程,又分创建,退出,等待
2.互斥锁,包括创建,销毁,加锁和解锁
3.条件操作,包括创建,销毁,触发,广播和等待。
7.线程退出的方式有哪些
1.线程从执行函数返回,返回值是线程的退出码
2.线程被统一进程的其他线程取消
3.调用pthread_exit()函数退出。
8.如何理解互斥锁
本质上讲,互斥量是一把锁,该锁保护一个或者一些资源(内存或者文件句柄等数据),一个线程如果需要访问该资源,必须要获得互斥量并对其加锁,这是如果其他线程想访问该资源也必须要获得该互斥量,但是锁已经加锁,所以这些进程只能阻塞,直到获得该锁的线程解锁,这是阻塞的进程里面有一个线程获得该互斥量并加锁,获准访问该资源,其他的线程继续阻塞,周而复始。
9.互斥锁的分类
1.快速性:默认的类型。
2.递归型:若遇到死锁,同一线程循环给互斥量上锁,系统将会知道该上锁行为来自同一线程,那么就会同意线程给该互斥量上锁。
错误检测型:如果该互斥量已经被上锁,那么后续的上锁将会失败而不会阻塞,pthread_mutex_lock()操作将会返回EDEADL