/*****************************************************************
*
* 作者:Forward
*
* 功能:解决读者写者问题(写者优先)
*
* 日期:2009年10月18日
*
* 版本:1.0
*
******************************************************************/
#include <windows.h>
#include <stdio.h>
const unsigned short TOTALNUM = 20; // 缓冲池大小
int g_buffer[TOTALNUM]; // 缓冲池
bool g_continue = TRUE; // 进程执行标志
int readcount; // 读者个数
int writecount; // 写者个数
unsigned short ReaderID = 0; // 读者ID号
unsigned short WriterID = 0; // 写者ID号
int read = 0; // 读者号
int write = 0; // 写者号
int out = 0;
HANDLE x_Semaphore; // 读者互斥信号量(实现读者一个一个进入,不允
// 许多个读者同时进行“进入”这一过程)
HANDLE y_Semaphore; // 写者互斥信号量(实现写者一个一个进入,不允
// 许多个写者同时进行“进入”这一过程)
HANDLE z_Semaphore; // 写进程优先权信号量(实现允许写者插队的机制)
// 通过下面两个信号量共同实现读写互斥访问
HANDLE wsem_Semaphore;
HANDLE rsem_Semaphore;
void EnterRoom(int num); // 进入图书室
void LeftRoom(int num); // 离开图书室
void Read(); // 读者读的过程
void Write(); // 写者写的过程
DWORD WINAPI Reader(LPVOID); // 读者访问进程
DWORD WINAPI Writer(LPVOID); // 写着访问过程
void EnterRoom(int num)
{
if (num == 1)
{
// 读者进入
g_buffer[write%TOTALNUM] = ReaderID;
}
else
{
// 写者进入
g_buffer[write%TOTALNUM] = WriterID;
}
write++;
}
void LeftRoom(int num)
{