生产者 消费者
一、 实验环境
PC + Linux Red Hat 操作系统
GCC
二、 源代码
使用信号量实现有限缓冲区的生产者和消费者问题
代码:
#include<unistd.h>
#include<sys/types.h>
#include<sys/sem.h>
#include<sys/mman.h>
#include<sys/ipc.h>
#include<stdio.h>
#define S 0 //控制生产消费者的权限
#define N 1 //可用产品总量
#define E 2 //缓冲区空闲数
int in=0; //生产者指针
int out=0; //消费者指针
#define BUFFER 10 //缓冲区大小为 10
int *critical;
int createSem()//创建信号量
{
return semget((key_t)1000,2,IPC_CREAT|0600); //semget 函数第二个
参数是要创建信号量的个数
}
void initSignal(int semid,int index,int value)//初始化信号量
{
semctl(semid,index,SETVAL,value);
}
void make_critical () //创建缓冲区
{
critical=(int *)mmap(NULL,BUFFER*sizeof(int),PROT_READ|
PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);
}
void semWait(int semid,int index)//判断当前进程是否进入缓冲区,被占
用就挂起
评论3
最新资源