关于itembuffer的信息

http://www.itjxue.com  2023-02-17 05:59  来源:未知  点击次数: 

计算机操作系统上的内容 关于利用记录型信号量解决生产者-消费者问题 这段代码中item

这是C语言写的一段程序,buffer[n]是一个数组,应该是整型的,因此buffer前面应该是int而非item

有关利用记录型信号量解决生产者消费者的问题?

有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将其所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,既不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区投放产品。

参考代码:

int in = 0, out = 0;//in: 输入指针, out: 输出指针;

item buffer[n];//n个缓冲区组成的数组;

semaphore mutex = 1, full = 0, empty = n;

//mutex: 互斥信号量, 生产者进程和消费者进程都只能互斥访问缓冲区;

//full: 资源信号量, 满缓冲区的数量;

//empty: 资源信号量, 空缓冲区的数量;//信号量不允许直接参与运算, 故都要定义;

//生产者程序;

void Producer() {

do {

生产者生产一个产品nextp;

wait(empty);//申请一个空缓冲区;

wait(mutex);//申请临界资源;

buffer[in] = nextp;//将产品添加到缓冲区;

in = (in + 1) % n;//类似于循环队列;

signal(mutex);//释放临界资源;

signal(full);//释放一个满缓冲区;

} while (TRUE);

}

//消费者程序;

void Producer() {

do {

wait(full);//申请一个满缓冲区;

wait(mutex);//申请临界资源;

nextc = buffer[out];//将产品从缓冲区取出;

out = (out + 1) % n;//类似于循环队列;

signal(mutex);//释放临界资源;

signal(empty);//释放一个空缓冲区;

消费者将一个产品nextc消费;

} while (TRUE);

}

注意:

生产者与消费者进程对资源信号量的申请与释放情况刚好相反(生产者是申请空,释放满;消费者是申请满,释放空)。

应先执行对资源信号量的申请,然后再对互斥信号量进行申请操作,否则会因起死锁(如果先申请互斥信号量再申请资源信号量,则可能发生一个进程申请互斥信号量成功,得到临界资源,再申请资源信号量失败,导致该进程带着临界资源进入阻塞状态,造成死锁)。

用JAVA实现一个关系

额。。。你需要四个类。

生产者类,消费者类,物品类,还有一个仓库类。

物品类 class Item{//一些物品的属性}

仓库类 class ItemStore

{

private ArrayListItem items; //仓库里保存物品

public void store(Item item){} //存

public Item get() {} //取

}

class Producer

{

public Item produce() {//生产物品}

public void store(Item item) {} //存仓库

}

class Customer

{

public Item get() {} //从仓库里取

public void custom(Item item) {} //消费

}

大概如此了。具体代码就懒得写了。

操作系统的pv操作的item buffer[n]中item是什么意思?一种类型吗?

在计算机操作系统中,PV操作是进程管理中的难点。

首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:

P(S):①将信号量S的值减1,即S=S-1;

②如果S?,则该进程继续执行;否则该进程置为等待状态,排入等待队列。

V(S):①将信号量S的值加1,即S=S+1;

②如果S0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。

PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。PV操作属于进程的低级通信。

什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。

一般来说,信号量S?时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S?,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。

(责任编辑:IT教学网)

更多

推荐程序员考试文章