[操作系统]进程同步 Reader-Writer问题 共享缓冲区问题 面包师问题 吸烟者问题

本文详细介绍了四个经典的并发控制问题及解决方案:Reader-Writer问题中如何保证多个读者或单个写者的互斥访问;共享缓冲区问题中,三个进程如何同步生成、统计和消费数据;面包师问题中,如何协调多个销售人员和顾客的顺序服务;以及吸烟者问题中,如何通过信号量实现三个依赖资源的吸烟者和供应者的同步交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. Reader-Writer问题

2. 共享缓冲区问题

3. 面包师问题

4. 吸烟者问题

1. Reader-Writer问题

多个Reader进程,多个Writer进程,共享文件F

允许多个Reader进程同时读文件

不允许任何一个Writer进程与其他进程同时访问(读或写)文件

写出 Reader-Writer 问题的改进算法

避免由于不断有 Reader 出现而使得 Writer 无限期等待

int rc = 0; //reader的个数
Semaphore_t mutex = 1; //互斥对 rc 的访问 
Semaphore_t f = 1; // 互斥对文件 F 的访问
Semaphore_t writer_wait = 1; // 当前是否有 writer 正在等待

void reader() {
	while (1) {
		P(&writer_wait)
		P(&mutex); // 互斥对 rc 的访问
		rc++;
		if (rc == 1) P(&f);//第一个读者
		V(&mutex);
		V(&writer_wait);
		read_file(); //读文件 F
		P(&mutex);
		rc--;
		if (rc == 0) V(&f);//最后一个读者
		V(&mutex);
		use_data();
	}
}

void writer() {
	while (1) {
		form_data();//准备数据
		P(&writer_wait);
		P(&f);
		write_file();//写文件
		V(&f);
		V(&writer_wait);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值