生产者消费者问题是操作系统中的一个经典的问题。
他描述的是一个,多个生产者与多个消费者共享多个缓冲区的事情,具体的定义百度。
然后看了操作系统的书籍如何解决书上给的伪代码是这样的
item B[k];
semaphore empty; empty=k; //可以使用的空缓冲区数
semaphore full; full=0; //缓冲区内可以使用的产品数
semaphore mutex; mutex=1; //互斥信号量
int in=0; //放入缓冲区指针
int out=0; //取出缓冲区指针
cobegin
process producer_i ( ) { process consumer_j( ) {
while(true) { while(true) {
produce( ); P(full);
P(empty); P(mutex);
P(mutex); take( ) from B[out];
append to B[in]; V(empty);
in=(in+1)%k; out=(out+1)%k;
V(mutex); V(mutex);
V(full); consume( );
} }
} }
coend
上面的注释,和过程已经比较到位了,只是我习惯用我的方法,即把生产和消费,放入临界区所以下面是我解决生产消费模型所用的伪代码
item B[k];
semaphore empty; empty=k; //可以使用的空缓冲区数
semaphore full; full=0; //缓冲区内可以使用的产品数
semaphore mutex; mutex=1; //互斥信号量
int