逄逄 发表于 2017-11-15 20:59:00

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

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

Linux小白在此谢过。

逄逄 发表于 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标识,以区分现在这个进程是读者还是写者。
页: [1]
查看完整版本: 用system V信号灯实现第二类读者写者问题