问题背景:有两个进程分别为消费者进程和生产者进程,对同一个临界资源进行访问,生产者不断地将生产的产品加入缓存区,而消费者不断地消费缓存区中的资源,利用信号量实现两个进程的同步和互斥。
问题分析:在生产者往缓存区中加入产品的时候,需要两个信号量,一个是互斥信号量,使得在生产者往缓存里放产品的时候其他进程不能对临界资源进行操作,另一个信号量是指示缓存区是否已满的信号量,从而判断生产者能否往缓存区加入产品;而消费者从缓存区中消费资源的时候,也需要两个信号量,一个信号量是互斥信号量,使得消费者在从缓存区中取产品的时候其他进程不能对临界资源进行操作,另外一个信号量是指示缓存区是否空,从而判断消费者能否对缓存区进行操作。
由以上分析,可知在该问题中共需要三个信号量,一个是用于互斥的信号量mutux=1;一个是用于指示缓存区空位置数目的empty=N;另外一个是指示缓存区填满位置的信号量full=0;