注:
down()
1 判断信号量的取值是否大于等于1
2 如果是,将信号量的值减去一,继续向下执行
3 否则,在该信号量上等待(进城被挂起)
up()
1 将信号量的值增加1(此操作将叫醒一个在信号量上面等待的进程)
2 线程继续往下执行
down()和up()是一组原子操作
#define N 100 //定义缓冲区的大小
typedef int semaphore; //定义信号量类型
semaphore mutex = 1; //互斥信号量
semaphore empty = N; //缓冲区计数信号量
semaphore full = 0; //缓冲区计数信号量,用来计数缓冲区里的商品数量
void producer(void)
{
int item;
while(TRUE){
item = produce_item();
down(&empty);
down(&empty);
insert_item(item);
up(&mutex);
up(&full);
}
}
void consumer(void)
{
int item;
while(TRUE){
down(&full);
down(&mutex);
item = remove_item();
up(&mutex);
up(&empty);
consume_item(item);
}
}
#define N 100
typedef int semaphore;
semaphore empty = N;
semaphore full = 0;
void producer(void)
{
int item;
while(TRUE){
item = produce_item();
down(&empty);
insert_item(item);
up(&full);
}
}
void consumer(void)
{
int item;
while(TRUE){
down(&full);
item = remove_item();
up(&empty);
consume_item(item);
}
}
#define N 100
typedef int semaphore;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;
void producer(void)
{
int item;
while(TRUE){
item = produce_item();
down(&empty);
down(&empty);
insert_item(item);
up(&mutex);
up(&full);
}
}
void consumer(void)
{
int item;
while(TRUE){
down(&mutex);
down(&full);
item = remove_item();
up(&mutex);
up(&empty);
consume_item(item);
}
}
#define N 100
typedef int semaphore;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;
void producer(void)
{
int item;
while(TRUE){
item = produce_item();
down(&empty);
down(&mutex);
insert_item(item);
up(&full);
up(&mutex);
}
}
void consumer(void)
{
int item;
while(TRUE){
down(&full);
down(&mutex);
item = remove_item();
up(&empty);
up(&mutex);
consume_item(item);
}
}