1、有进程A对文件F进行读操作,进程B对文件F进行写操作,对文件F的读写操作不能同时进行。请利用PV原语和信号量实现进程A与B的互斥。
这种题目不难,把信号量确定好,然后按进程流程写就好了。
```c
semaphore read = 1; // 读信号量
semaphore write = 1; // 写信号量
void A(){
wait(write); // 等待文件F的写操作完成
// 读取文件F的数据
signal(write); // 文件F的写操作已完成,解锁
}
void B(){
wait(read); // 等待文件F的读操作完成
wait(write); // 等待文件F的写操作完成
// 写入文件F的数据
signal(write); // 文件F的写操作已完成,解锁
signal(read); // 文件F的读操作已完成,解锁
}
```
- 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/738172
- 这篇博客也不错, 你可以看下题10.4:有两个磁盘文件A和B,各存放一行字母,今要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中去。
- 除此之外, 这篇博客: 通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。中的 通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
- 使用菜单形式对应各个操作,应允许用户反复查看结果,想结束程序时,输入负数结束,使其编成一个完整的小软件。
- 菜单参考示例如下:
1—输入集合A和B
2—求集合A交B
3—求集合A并B
4—求集合A-B
退出,输入一个负数!
3.验收/测试用例
输入: A={1,2,3,4,5} B={3,4,5,6,7}
要注意输入的过程中,每输入一个元素都要检查输入的这个元素是否和前面的元素重复,如果重复,要求用户重新输入当前元素。
验收测试时要测试这种重复的情况。
输出 A交B={3, 4, 5} A并B={1,2,3,4,5,6,7} A-B={1, 2}