|
楼主 |
发表于 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标识,以区分现在这个进程是读者还是写者。 |
|