educoder平台
第一关-生产者与消费者同步问题
使用记录型信号量解决该问题
书本上的实例代码
int in=0,out=0;
item buffer[n];
semaphore mutex=1,empty=n,full=0;
//mutex互斥信号量,empty空缓冲区,full满缓冲区
//生产者
void producer(){
do{
producer an item nextp;
...
wait(empty);//空缓冲区数量减一
wait(mutex);//互斥信号量减一
buffter[in]=nextp;//缓冲区写入数据
int=(in+1)%n;//放入物品数
signal(mutex);//互斥信号量加一
signal(full);//满缓冲区数量加一
}while(TRUE);
}
//消费者
void consumer(){
do{
wait(full);//满缓冲区数量减一
wait(mutex);//互斥信号量减一
nextc=buffter[out];
out=(outn+1)%n;//取出物品数
signal(mutex);//互斥信号量加一
signal(empty);//空缓冲区数量加一
consumer the item in nextc;
}while(TRUE);
}
void main(){
cobegin
producer();
consumer();
coend
}
在平台上实现
//wait()-sem_wait(),signal-sem_post()
//主线程序启动生产者线程和消费者线程,全局变量初值为0
//生产者线程向全局变量进行10次赋值(代表生产),消费者线程从全局变量读取值,///并重新赋值0(代表消费了产品)
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h&