Linux-进程同步与互斥&生产消费者原理

进程同步与互斥&生产消费者原理

一. 进程互斥与同步

        进程互斥与同步机制的主要任务是:对多个相关进程在执行次序上进行协调,使并发执行的诸进程间能按照一定的规则(或时序)共享系统资源,并能很好的相互合作,从而使程序能够正确执行。

        在多个进程共享资源或为完成某一任务而相互合作时,可能存在以下两种形式的制约关系:

(1)间接相互制约关系(互斥)

        多个程序并发执行时,要对临界资源进行共享,所以只能互斥的访问临界资源,这些进程间就形成了间接制约关系。

(2)直接相互制约关系(同步)

        多个进程间为完成某一共同任务时必须合作进行。比如一个进程用于输入数据,另一进程用于计算数据,只有输入进程拿到数据之后,计算进程才可进行计算,也就是说输入进程完成后才可进行计算进程,即输入进程直接制约着计算进程。

        由于上述两种制约关系的存在,必须对临界资源的访问和进程的执行次序进行协调,保证各进程按次序执行,这就是进程的互斥与同步概念。



二. 生产者消费者问题

        该问题就是一个著名的进程同步问题。它描述的是:一群生产者进程正在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程和消费者进程能够并发执行。在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将生产的产品放入缓冲区中,消费者进程从缓冲区中取走产品进行消费。

        生产者在投放产品时,消费者不能去取产品。消费者在取产品时,生产者不能投放产品。 即对缓冲区必须互斥的使用。
        
        只有生产者往缓冲区中投放了产品,消费者才可取走消费,而不能在空缓冲区中取走产品。同理,当缓冲区满了的时候只有消费者进程取走产品后,生产者进程才可继续投放产品,而不能对满了的缓冲区投放产品。 所以生产者进程与消费者进程之间必须同步。

        所以,可以利用信号量实现对临界资源(缓冲区)的维护。

本文内容来源于:点击打开链接

你可能感兴趣的:(Linux)