多线程编程
chapter1:线程的概念
1.概述:
(1)学习目标:
【1】了解线程的基本概念
【2】了解线程的优势
(2)重点难点:并发、并行、同步、异步
2.什么是线程
(1)进程:一个正在执行的程序,是一个动态的概念,它是资源分配的最小单位
(2)为什么会出现线程?
【1】线程:有时候又称为轻量级进程,是程序执行的最小单位,是系统独立调度和分配CPU的基本单位,它是进程中的一个实体。一个进程可以有多个线程,这些线程共享进程的所有资源,线程本身只包含一点必不可少的资源。
【2】进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤销与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大。
(3)多线程原理图解
【1】CPU时间片轮(看起来像一个左***)
【2】单线程模型
【3】多线程模型
【4】多进程模型
3.关于线程的一些术语
(1)并发:是指在同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果;简单来说,就是看起来是同时发生,单核;
(2)并行:是指同一时刻,有多条指令在多个处理器同时执行。真正意义上的同时发生;
(3)同步:彼此有依赖关系的调用不应该“同时发生”,而同步就是阻止那些“同时发生”的事情;所以就是要采用一些同步的机制(例如锁)来规定执行的顺序。
(4)异步:异步的概念和同步是相对的,任何两个独立的操作都是异步的,它表示事情独立发生
4.多线程的优势
(1)在多处理器中,提高了开发程序的并行性;
(2)在等待慢速IO操作时,程序可以执行其他操作,提高并发性;
(3)模块化的编程,能更清晰的表达程序中独立事件的关系,结构清晰
(4)占用较少的系统资源(相对于多进程而言)
注:多线程不一定需要多处理器
chapter2:线程的创建和生命周期
1.概述
(1)学习目标:
【1】学会创建线程;
【2】掌握pthread_create()参数意义
【3】掌握线程的生命周期
(2)重点难点:pthread_create()参数和线程的生命周期
(3)思考
【1】如何给新线程传递多个参数
【2】线程有几种基本状态
2.创建新线程
(1)线程ID
这里要注意下,我们在做开发的过程中要考虑程序的可移植性问题,在linux系统下,pthread_t包含在上面那个路径的文件里的,并且是一个unsigned long int。但是在Mac的系统里,pthread_t是一个结构体,我们就不能直接打印了。
下面,我们使用man命令来查看下pthread_self函数的原型,结果如下:
分析:
【1】头文件:<pthread.h>
【2】返回值:pthread_t
【3】参数:void
【4】 complie and link with -pthread:我们在编译和链接的时候要用到pthread库
(2)实例:获取主线程的ID: