1.线程是什么
线程(Thread)是进程当中的一条执行流程,是进程的一个实体。
同一个进程内多个线程之间可以共享该进程的地址空间、堆空间、全局变量、打开的文件等资源,但每个线程都有独立一套的寄存器和栈,这样可以确保线程的控制流是相对独立的。
参考:https://mp.weixin.qq.com/s/YXl6WZVzRKCfxzerJWyfrg
2.生产者-消费者模型
生产者负责生产产品,消费者负责消费产品。
过程: 生产者生产产品放入仓库,消费者查看仓库是否有产品,如果有就消费;如果没有,就等待生产者生产。生产者生产好之后,发出信号告知消费者,消费者等待结束,消费产品。
3.消息队列
生产者和消费者之间需要通信的媒介,就是消息队列。
生存者发送消息,消息队列存下消息,再传送给消费者。
注意: 读取消息队列时,如果为空,应该阻塞
写消息队列时,如果已满,也应该阻塞
4.锁的概念
每个线程在对资源操作之前,先加上一个锁,防止别的线程来操作这些资源。操作完成之后,再解锁。
这里的锁也就是操作系统书上所说的信号量(Semaphores)
锁有两个原子操作,wait(S)、signal(S)
,也称为P、V操作
wait操作是等待资源,signal操作是释放资源。
实现消息队列需要锁
5.条件变量概念
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。
条件变量是线程的另外一种同步机制,这些同步对象为线程提供了会合的场所
6.C++ 关于多线程的操作
C++ 中mutex
是互斥锁
用到了线程,编译线程时要加上-pthread