操作系统实习之进程同步

###########操作系统实习课题###########

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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值