调研同步与互斥概念原理,了解生产者消费者原理

现代操作系统提供了一个并发控制环境,即系统中同时活动着多个不同的进程,这些进程共享同一个CPU,内存或I/O设备。特别是对于linux操作系统来说,其多任务,多用户,分时实时混合的性质决定了多个进程在某种程度上彼此依赖或相互制约的关系,这些关系我们叫“并发关系”,按其性质可以分为同步和互斥两类。

进程互斥

由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥。系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。在进程中涉及到互斥资源的程序段叫临界区。互斥是一种独占关系,如任一时刻,进程1和进程2只能有一个写文件C。

进程同步

是指多个进程需要相互配合共同完成一项任务。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源,如“第一类读写者模型”。同步是一种时序关系,如规定了进程1处理完事情A后,进程2才能处理事情B。

如果A和B互相包含,那A只能等于B,而同步和互斥的是不对等的。但从广义上来看,互斥是一种特殊的同步,同步是一种更为复杂的互斥关系。

临界资源

系统中同时存在有许多进程,他们共享各种资源,然而有许多资源在某一时刻只能允许一个进程使用。例如打印机,磁带机等硬件设备和变量,队列等数据结构,如果有多个进程同时去使用这些资源就会造成混乱。因此必须保护这些资源,避免两个进程同时访问这类资源。我们把某段时间只能允许一个进程使用的资源成为临界资源。

生产者与消费者

有两个进程分别为消费者进程和生产者进程,对同一个临界资源进行访问,生产者不断的将生产的产品加入缓冲区,而消费者不断的消费缓冲区中的资源,利用信号量实现两个进程的同步与互斥。

在生产者往缓冲区加入产品时,需要两个信号量,一个是互斥信号量,使得在生产者往缓存里放产品的时候其他进程不能对临界资源进行操作,另一个信号量是指示缓存区是否已满的信号量,从而判断生产者能否往缓冲区加入产品;而消费者从缓冲区中消费资源的时候,也需要两个信号量,一个信号量是互斥信号量,使得消费者在从缓冲区中取产品的时候其他进程不能对临界资源进行操作,另外一个信号量是指示缓冲区是否为空,从而判断消费者能否对缓冲区进行操作。

由以上分析,可知在该问题中共需要三个信号量,一个是用于互斥的信号量mutux=1; 一个是用于指示缓冲区空位置数目的empty=N;另外一个是指示缓冲区填满位置的信号量full = 0;

用于同步的信号量一定是位于不同进程中,用于互斥的信号量一定是位于同一个进程中。

猜你喜欢

转载自blog.csdn.net/qq_40995354/article/details/79932481