您的位置:首页 > 其它

操作系统中生产者/消费者问题(一)

2016-10-08 18:26 141 查看
生产者/消费者是个典型的进程同步问题,只有生产者生产出来东西了,消费者才能消费

也就是说,生产者生成出来一个东西,然后通知消费者,(东西好了,快来拿吧),而消费者则查看缓冲器里面有没有东西,若没有则会通知生产者生产东西,这样一个钟相互合作的进程同步问题。

一、一个生产者,一个消费者,一个缓冲器

分析:

首先需要一个信号量用于计数剩余空的缓冲器的数量sp = 1。

需要一个存放数据的缓冲器buffer;

因为有两个人(生产者,消费者)要清楚知道缓冲器的状况(满还是空),所以还需要一个信号量sc = 0,用于说明空寄存器的个数。

int buffer;
Semaphore sp = 1,sc = 0;

process producer(void)
{
while(1)
{
{生产一个产品producer};
p(sp);
Buffer = product;
v(sc);          //唤醒消费者
}
}


process consumer(void)
{
while(1)
{
p(sc);
{取走缓冲器中的产品};
v(sp);        //唤醒生产者
{消费该产品};
}
}


二、一个生产者,一个消费者和n个缓冲器

这个和上面差不多,也是一个一个往缓冲器里面放东西,生产者看到有缓冲器是空就会往里面放东西,但还是一个一个放,所以只要修改上面程序将buffer改为buffer[k],然后k=(++k)%n,计数就行。

int buffer
,k = 0, t = 0;
Semaphore sp = 1,sc = 0;

process producer(void)
{
while(1)
{
{生产一个产品producer};
p(sp);
Buffer[k] = product;
k = (++k)%n;
v(sc);          //唤醒消费者
}
}

process consumer(void)
{
while(1)
{
p(sc);
{取走缓冲器中的产品};
t = (++t)%n;
v(sp);        //唤醒生产者
{消费该产品};
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  操作系统