日期:2014-05-17  浏览次数:20801 次

信号量 读者写者问题代码有点不理解
以下是PASCAL代码: 
读者: 
BEGIN 
P(mutex); 
read_count:=read_count+1; 
IF read_count=1 
THEN P(writer) 
V(mutex); 
读文件; 
P(mutex); 
read_count:=read_count-1; 
IF read_count=0 
THEN V(write); 
V(mutex); 
END; 
写者: 
BEGIN 
P(write); 
写文件; 
V(write); 
END; 

尤其其中这个语句: IF read_count=1 
THEN P(write); 不太理解,read_count=1不是表示已经有一个读者在读了吗?那写者就不能进入了吧,为什么还能执行P(write)呢?我知道mutex和write都是互斥信号量,初值为1.这条语句到底是什么意思,我没学过PASCAL,只学过C,也许是这里出了问题吧。恳请高手指点,小妹当感激不尽。
问题补充:如果可能的话,能不能每条语句都帮我解释下呢。搞不懂啊...
------解决方案--------------------
根据版规,0分帖全部转移至非技术区!
http://topic.csdn.net/u/20080830/18/189fc510-7842-42c1-8029-cf8f3130f4c3.html

引用就可以获得10个可用分。
3. 如果您的帖子非常精彩,被推荐到论坛首页,为此将奖励您可用分88分。
4. 当您的问题得到解答,完成结帖操作,系统将返还给您提问分数的50%可用分。
5. 每成功增加一位好友,成为好友的双方各会得到20分的可用分赠送,得到300可用分后封顶。
6. 您为何要如此执著、坚定、矢志不移、勇往直前、坚持一百年不动摇地发零分帖呢?


------解决方案--------------------
我还以为是答案呢,伤心...这个我不知道,下次一定..
------解决方案--------------------
因为他是先 read_count:=read_count+1; 
这样read_cound=1了!
当然就是判断 read_count=1  了

我的问题是可不可这样
IF read_count=0
THEN P(writer) 

P(mutex); 
read_count:=read_count+1; 
V(mutex);