读者-写者问题-第三十二天
2024-01-03 06:13:00
目录
问题描述
对于②:数据覆盖?
解决问题?
1、?关系分析:找出题目中描述的各个进程,分析它们之间的同步、互斥关系
只有互斥关系:写进程与写进程互斥、写进程与读进程互斥、读进程与读进程不互斥
2、整理思路:根据各进程的操作流程确定P、V操作的大致顺序
3、 设置信号量:设置需要的信号量,并根据题目要求确定信号量初值(互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值时多少)
semaphore rw = 1; //用于实现对共享文件的互斥访问
int count = 0; //记录当前有几个读进程在访问该文件
semaphore mutex = 1; //用于保证对count变量的互斥访问
semaphore w = 1; //用于实现“写优先”
4、代码实现?
当出现以下并发执行的顺序时:
- 情况一:读者1->读者2
- 情况二:写者1->写者2
- 情况三:写者1->读者1
- 情况四:读者1->写者1->读者2
- 情况五:写者1->读者1->写者2
结论
1、在这种算法中,连续进入的多个读者可以同时读取文件;写者和其他进程不能同时访问文件;写者不会饥饿,但也并不是真正的“写优先”,而是相对公平的先来先服务原则(故该算法也称“读写公平法”)
2、 该算法为我们解决复杂的互斥问题提供了一个参考思路(其核心思想在于设置了一个计数器count用来记录当前正在访问共享文件的读进程数,我们可以用count的值来判断当前进入的进程是否是第一个/最后一个读进程,从而做出不同的处理,另外,对count变量的检查和赋值不能一气呵成会导致一些错误,因此我们后面也会联想到使用互斥信号量mutex来解决该问题)?
~over~
文章来源:https://blog.csdn.net/m0_73975164/article/details/135351989
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!