Var rmutex,wmutex: semophore:=1,1;
Readcount: integer:=0;
begin
parbegin
Reader: begin
repeat
wait(rmutex);
if Readcount=0 then wait(wmutex);
Readcount:=Readcount+1;
signal(rmutex);
**********************
perform read operation;
**********************
wait(rmutex);
Readcount:=Readcount-1;
if Readcount=0 then signal(wmutex);//既可以防止在有读者的情况下阻止写者进入,又可以在有写者的情况下堵塞读者自己
signal(rmutex);
until false;
end
writer: begin
repeat
wait(wmutex);
*********************
perform write operation
**********************
signal(wmutex);
until false;
endreader and writer
最新推荐文章于 2021-11-27 13:18:19 发布
本文介绍了一种使用信号量实现的读写锁机制。通过两个信号量分别控制读操作和写操作,确保多个读者可以同时访问资源,而写者则独占资源。此机制有效地解决了读者阻塞问题,并在有写者等待时能够阻止新的读者加入。
2451

被折叠的 条评论
为什么被折叠?



