###########操作系统实习课题###########
1.题目内容:
在windows或者linux环境下编写应用程序,该程序运行时能创建N个线程,其中既有读者线程又有写者线程,它们按照事先设计好的测试数据进行读写操作。用信号量和PV操作实现读者/写者问题。
2.题目要求:
理解临界区和进程互斥的概念,掌握用信号量和PV操作实现进程互斥的方法。
3.设计思想:
允许多个读者同时读,不允许读者和写者同时操作,不允许多个写者同时操作.无读者、写者,新读者可以读,写者等,但其他读者正在读,则新读者可以读,有写者写,则新读者等,有新写者,有写者写,则新写者等,有读者,则新写者等,无读者和写者,则新写者可以写.通过使用定义信号量让读者与编者互斥的同时同步访问资源,通过定义互斥量使读者与编者互斥访问资源.
4.算法流程:
5.代码:
代码片
#include<iostream>
#include<windows.h>
#include<stdlib.h>
#include<string>
#include<process.h>
using namespace std;
//CRITICAL_SECTION book;//定义关键区
int readcount=0,n,w,r;
static HANDLE rbook=INVALID_HANDLE_VALUE;
HANDLE editor;//互斥量编者和读者的互斥访问; readcount是临界资源
HANDLE mutex;
typedef struct test{
int n;
char c;
char a[100];
}Test;
void gotoxy(int x,int y);
int welcome()//界面
{
system("color f1");
system("title 信号PV读者编者问题");
for(int i=20;i<100;i++)
{
gotoxy(i,1);
cout<<"-";
}
for(int i=1;i<12;i++)
{
gotoxy(20,i);
cout<<"|"; } ;
for(int i=1;i<12;i++)
{
gotoxy(99,i);
cout<<"|"; } ;
for(int i=20;i<100;i++)
{
gotoxy(i,12);
cout<<"-";
}
gotoxy(55,2);
cout<<"创建总线程数:"<<endl;
return 0;
}
///
void gotoxy(int x,int y)
{
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle