读者-写者问题

本文深入探讨读者-写者问题,强调了在多进程环境中,如何保证多个读进程能同时访问数据而写进程与其他进程互斥。文章分为读者优先和读写公平两部分,分析了两者的关系并提供了相应的代码实现。读者优先策略可能导致写进程饥饿,而读写公平策略确保了写进程与读进程的优先级平衡。
摘要由CSDN通过智能技术生成

一、读者优先

问题描述

有读进程和写进程两组并发进程,共享一个文件,当两个或两个以上读进程同时访问共享数据时,不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能会导致数据不一致的错误。因此要求:1.允许多个读者可以同时对文件执行操作;2.只允许一个写者往文件中写入信息;3.任意一个写者在完成操作前不允许其他读者或写者工作;4.写者执行操作前,必须等已有的读者或写者全部退出。

关系分析 

两类进程:读进程和写进程。

1.读者和写者是互斥的;

2.写者和写者是互斥的;

3.需要用一个计数器来记录是否有读者在读文件。

代码 

semaphore rw = 1;		//互斥访问文件

int count = 0;				//记录有几个读者在访问文件
semaphore r = 1;			//对count变量互斥访问

writer(){
	while(true){
		P(rw); 				//互斥访问文件
		writing;
		v(rw);
	}
}

reader(){
	while(true){
		P(r);				//对count变量互斥访问
		if(count == 0){
			//如果是第一个读者,则需要阻止其他写者对文件的访问
			P(rw);
		}
		count++;
		V(r);
		reading;
		P(r);
		count--;
		if(count == 1){
			V(rw);
		}
		V(r);
	}
}

注意

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值