C++之每日知识树-05-进程/线程的同步/通信

依旧以铁三角来进行思维的小扩散(what、why、how)。

what:什么是同步/通信?
首先,同步是一种通信。
进程/线程的同步/通信:在并发过程中,进程之间需要相互等待和互通消息,这就是进程/线程的同步/通信。

why:为何要进行同步/通信?
先说一下进程:进程在整个生命周期中经历了创建-就绪-运行-阻塞-结束的过程,在并发环境下,不同的进程相互独立,要想实现并发,CPU必须很好的协调和调度不同的进程。
C++之每日知识树-05-进程/线程的同步/通信
在并发过程中,进程之间的关系为:
1、竞争关系,通过互斥来协调。资源竞争容易出现两个问题:死锁问题和饥饿问题
2、协作关系,通过同步和通信来协调。一般同步是指并发进程在一些关键点上需要相互等待与互通消息,这种相互制约的等待与互通消息称为进程同步。

再说一下线程:线程是进程内部的运行单元,是CPU调度的最小单位。。每个进程可以包含多个线程,但至少包含一个,线程共享进程的资源,故也需要进行同步与通信。

how:
在这里同步即通信,因为同步是一种通信。还有些人说线程之间叫同步,进程之间叫通信。
C++之每日知识树-05-进程/线程的同步/通信
C++之每日知识树-05-进程/线程的同步/通信
关于多线程间通信,大家可以搜一下生产者与消费者模型,这是一个两个线程的通信,我之前也写过一篇,利用了互斥量,信号量和事件c++多线程之条件变量及生产消费者模型