semaphore mutex = 1, empty = k, full =0; //互斥信号量1,可用的空闲的缓冲区数量为k,缓冲区内可用的产品数full,起始为0
item b[k]; //长度为k的缓冲区
int n=0,m=0; //n为放入位置,m为取出位置
cobegin
process producer_i()
{
while(true) //需要一直询问
{
produce(); //生产产品,此处为伪代码,应有更为详细的函数
P(empty); //申请空缓冲区
P(mutex); //实现互斥使用缓冲区
append to b[n]; //将产品放入缓冲区中
n = (n+1)%k; //更新产品放入位置
V(mutex); //释放
V(full);
}
}
process consumer_i()
{
while(true)
{
P(full); //当缓冲区内有产品时才能访问
P(mutex);
take() from b[m]; //将产品从缓冲区中取出
m = (m+1)%k;
V(mutex);
V(empty); //取走产品后空闲缓冲区数量+1
consume();
}
}
coend
信号量机制解决生产者-消费者问题
最新推荐文章于 2022-09-13 09:57:47 发布