鱼C论坛

 找回密码
 立即注册
查看: 3595|回复: 1

用system V信号灯实现第二类读者写者问题

[复制链接]
发表于 2017-11-15 20:59:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个第二类读者写者问题(也就是写者优先),我知道用信号量怎么解决这个问题。但是systemV我看了很多资料,越看越糊涂,他那些函数里的参数,哪些是引用一个库就可以的,哪些是要自己定义,完全懵逼。
尤其是看网上的资料还有很多自己写wait signal函数的。。
?????有没有大佬指导一下思路,那些函数怎么用啊???

Linux小白在此谢过。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-11-19 11:31:39 | 显示全部楼层
好吧。
还是没有人回答,然后自己就搞明白了。
把自己的理解写下来,以供后来有人查的话也能有所领悟吧。
用system V信号灯解决第二类读者-写者问题,我主要遇到了三个疑惑。

1.第二类读者-写者问题如何实现:这个很容易查到很多资料,那么主要需要解决的就是读写互斥,写写互斥,写者优先,和多读并发。
由于system V信号灯其实是一个有许多信号量的集合,所以着重了解“如何用信号量实现读者-写者问题”就好了,其实上面提到的互斥,就是一个进程把这个信号量的资源拿走了,另一个就阻塞等待这个信号量的资源,就可以实现互斥了。

2.如何把system V联系到这个问题中?
system V主要有三个API,semget, semctl, semop。 大家首先理解这三个函数如何使用即可。我的做法其实就是换汤不换药,我用这三个函数,封装出wait, signal这样的功能,然后再用这个自己封装的wait signal用于,信号量解决读者写者问题里面了。

3.如何创建多个读者-写者进程?
这个其实是因为我还是个编程小白,尤其刚刚接触Linux,之前学C基础的时候也没有深入接触到进程,线程这一方面,都是在学习一些算法。很皮毛。所以我一直不太明白怎么用程序实现多个进程、线程。线程还好说,pthread库里面有很多相关函数。 进程的话,我有了解到可以用命令行里面同时打开多个程序这样。我自己按照习惯,用的是一个for循环,里面不断的fork,父进程负责生成进程,子进程才是真正的读者、写者进程,这些进程用随机来的0,1标识,以区分现在这个进程是读者还是写者。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-19 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表