为什么要有线程?

进程相当于一个项目,而线程就是为了完成项目需求,而建立的一个个开发任务

  • 第一,创建进程占用资源太多;
  • 第二,进程之间的通信需要数据在不同的内存空间传来传去,无法共享。

如何创建线程?

一个普通线程的创建和运行过程:

image.png

线程的数据

线程访问的数据细分成三类:

  • 线程栈上的本地数据. 就是函数栈中的变量
  • 在整个进程里共享的全局数据. 该变量只有一份
  • 线程私有数据. 该变量每个线程持有一份 (只是同名)

image.png

数据的保护

互斥锁

Mutex,全称 Mutual Exclusion,中文叫互斥

  • 争, 谁先拿到谁访问

image.png

条件锁

当它接到了通知,来操作共享资源的时候,还是需要抢互斥锁,因为可能很多人都受到了通知,都来访问了,所以条件变量和互斥锁是配合使用的

image.png

总结

image.png