1. 线程是程序的最小运行单元,代码段只是数据
2. 和进程类似,线程也存在资源竞争,在不做管控的情况下,你并不会知道哪一个线程先运行
3. 线程没有主次之分,但是进程结束,线程也就结束,所以进程的那条线程可以认为是‘主’线程
4. 每条线程都拥有自己的寄存器和栈段,所以当线程结束后,线程内的数据也会被释放
5. 线程之间的通信:句柄思想、共享空间、返回值、传出参数、全局变量等等
线程管控↓线程管控↓线程管控↓
6. 锁:线程中最重要的概念之一,管理线程
多线程同时对统一全局变量进行修改时,会经历,读->改->写,三步
例:两个线程同时读了一个变量a到自己的寄存器,然后a+1,然后把修改后的a传回内存,a等于6,但实际上设计者希望a=7,因为a加了2次
锁会将读改写三步合成一个原子操作,并且其他线程等待锁的过程也可以设置阻塞
但同一个锁的资源只有一个
7. 死锁:当一个锁被线程占用时,申请该锁会导致线程进入阻塞等待,即便自己正在使用这个锁,
例:拿着手机找手机
解决方案:尽量不使用多个锁,使用多个锁也需按严格按顺序使用,设计程序时不断设想是否会造成死锁,也可以使用非阻塞申请锁
8. 信号量:锁的升级版,可以自己设置资源量,也就是多个锁
信号量不仅可以用于同一进程之中的线程,还可以跨进程使用,非常强大
9. 条件变量:通过一个变量响应程序操作,可以管理线程执行顺序的切换
可以暂时释放锁,使得其他线程可以使用锁,在其他线程响应条件变量后,该线程会重新申请锁,并且继续运行