读进程具有优先权的读者写者问题
一、 实验环境
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>
int *critical;
int createSem()//创建信号量
{
return semget((key_t)1000,2,IPC_CREAT|0600);
}//the second parameter in semget is the number of signal we will create
void initSignal(int semid,int index,int value)//初始化信号量
{
semctl(semid,index,SETVAL,value);
}
void make_critical () //创建缓冲区
{
critical=mmap(NULL,10*sizeof(int),PROT_READ|
PROT_WRITE,MAP_SHARED|
MAP_ANONYMOUS,-1,0);
critical[0]=-1;//the value of the critical file is init as -1
critical[1]=0;//the reader count is 0;
}
void semWait(int semid,int index)//判断当前进程是否进入缓冲区,被占
用就挂起
{
struct sembuf sem_buf;
sem_buf.sem_num=index;
sem_buf.sem_op=-1;