某公司有两种零件A和B,最大数量各为N个。该公司将一个A和一个B组装成一个新的产品销售,每次各取一个。有另外两个公司分别不断供应A,B(每次1个)。为保证正常生产,当某种零件的数量比另一种的数量超过M(M<N)个时,暂停对数量大的零件进货,补充数量少的的零件。
请采用信号量机制,用wait、signal操作描述上述问题中的同步和互斥关系。 (要求:用类C语言描述,给出信号量的定义、初始化,并加必要的注释)
3. 参考答案 :
Semaphore emptyA=N;emptyB=N;fullA=0;fullB=0;//说明:empty表示组装产品的公司可接受的零件数,full表示所进的零件数
The producer process A
do {
…
produce an item in nextp
…
wait (emptyA);
…
生产一个A零件
…
signa1 (fullA); //供应零件A
} while (1);
The producer process B
do {
…
produce an item in nextp
…
wait (emptyB);
…
生产一个B零件
…
signa1 (fullB); //供应零件B
} while (1);
The consumer process
do {
wait (fullA);//取零件A
wait (fullB);//取零件B
…
组装产品
…
if(emptyA.value-emptyB.value<M && emptyA.value<N)
signal (emptyA);
if(emptyB.value-emptyA.value<M && emptyA.value<N)
signal (emptyB);
…
销售产品
…
} while (1);
评分标准: 共12分,期中变量(信号量)定义及其初始化占3分,其他部分9分(主要看程序框架)。