操作系统实验,IPC(2): reader and writer, 读者和写者问题

本文探讨操作系统中的IPC问题,重点关注读者与写者问题。分别分析了读者和写者对等、读者优先以及写者优先三种情况,并解释了如何通过信号量解决多人读取限制。文中提供了读者可以多人读取且读者优先的代码实现。
摘要由CSDN通过智能技术生成

1.首先,关于信号量的问题请看上一篇博客。

2.读者和写者问题分为读者和写者对等且二者都不能多人读取,读者和写者对等但都可以读者可以多人读取,读者优先并且读者可以多人读取。写者优先但是读者可以多人读取。

3.如果是二者对等,不管是不是多人读取,只需要一个互斥量就可以了。这里要说明一点,它和生产者和消费者不一样。生产者和消费者问题的共享资源是有数目的。但是这里没有。

4.如果要实现读者可以多人,必须给读者一个单独的信号量。把读者的进入和离开分成两个步骤。只要读者进入,就释放资源。这样后面的就可以继续进入。

5.要实行读者优先,就可以给读者计数,如果读者的数目刚开始或者最后一个的情况考虑一下就可以了。

6.所以下面的读者可以多人读取并且读者优先就使用了两个信号量。不过应该用反了。应该是读者和写者共享的那个是mutex,复制的时候也是mutex,这里说一下。因为我不想改了,只是觉得写反了。

7.如果写者优先,就需要计数,类似于读者。

8,写者优先还有一个问题,就是如果现在写者在用共享变量,但是后面排队的有读者和写者,这个写者便不释放资源,直接让写一个写者使用资源即可。如此以来,读者就需要一个单独的变量。如前面所说,来保持全部写者之间的轮流。

9,这时候就剩最后一个问题就可以实现写者优先了。就是在读者控制资源的时候,有写者和读者排队,先到的先使用。我们需要一个全局信号量来做。就是来排队。

下面是读者优先的代码

#include<windows.h>   
#include<fstream>
#include<cstdlib>
#include<iostream>
#include <ctime>
using namespace std;
     
const int MaxThread=20;            

 
HANDLE hX;    
HANDLE hWsem; 
HANDLE thread[MaxThread]; 
int readcount; 
double totaltime; 
 
void WRITEUNIT(int iProcess)
{
        printf("%dth writer begins to write.\n",iProcess);
        Sleep((DWORD)(6000));
        printf("End of %dth writer  for writing.\n",iProcess);
 
}
 
void READUNIT(int iProce
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值