各位看官们,大家好,上一回中咱们说的是使用共享内存进行进程间通信的例子,这一回咱们说的例子是:进程间同步与互斥。闲话休提,言归正转。让我们一起talk C栗子吧!
大家还记得我们在前面章回中说过的内容吗?关于进程之间的通信,有三个问题需要解决:(参见第八十三回)
- 1.进程之间如何通信;
- 2.进程之间如何使用临界资源;
- 3.进程之间如何有序地执行某项任务;
前两个问题在前面的章回中我们已经解决了,今天我们来解决第三个问题。该问题就是通常所说的进程间的同步与互斥。“什么是进程的同步与互斥呢?“这时候,台下有看官在提问,看官莫急,接下来我就介绍进程间同步与互斥的概念。
1.进程间同步
所谓的同步就是指不同的进程之间按照一定的顺序来运行。
比如,我们上一回中介绍的消息队列,正常的进程运行顺序是:发送消息的进程先向消息队列中发送消息,然后是接收消息的进程从消息队列中获取消息。如果发送消息的进程和接收消息的进程按照这个顺序运行,那么可以说这两个进程是同步的。反之,我们就可以说这两个进程不同步。
进程间不同步就会造成程序运行错误,比如发送消息的进程还没有向消息队列中发送消息,接收消息的进程就开始从消息队列中获取消息,那么接收消息的进程可能获取不到消息,因为消息队列中还没有消息。或者说它获取到的是消息队列中旧的消息。这显然不是我们想要的结果。
2.进程间互斥
所谓的互斥就是指不同的进程不能同时访问临界资源。
比如我们在前面章回中介绍的共享内存,它本质上是内存中的一段地址空间,该地址空间可以被不同的进程使用,但是,同一个时间内,只允许一个进程使用。我们使用的计算机中,临界资源非常多,比如硬盘,内存,打印机等。
举一个容易理解的例子,如果两个进程都使用打印机打印文件,那么打印机该打印哪个进程的文件呢?所以同一段时间内,只能有一个进程使用打印机打印文件。
看官们,听完我对同步和互斥的介绍是不是觉得有点乱呢。其实,进程间的同步和互斥在本质上是一回事,只是处理问题的角度不同而已。
- 同步是从进程的角度去处理问题,它重点关注进程的运行顺序;
- 互斥是从临界资源的角度去处理问题,它重点关注使用临界资源的时间;
看官们,这一回咱们只介绍进程间同步与互斥相关的概念,并且举一些通俗易懂的例子进行说明,如果大家感觉理解困难的话,先不用担心,我们在后面的章回中会通过代码来说明进程间同步与互斥。到时候就会对进程间同步与互斥有更加清楚的了解。
各位看官,关于进程间同步与互斥的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。