代码
1.定义变量
代码如下:
semaphore rw_mutex=1;//读者和作者之间的互斥信号量,当作者正在写作时,读者进程无法运行
semaphore mutex=1;//确保更新变量read_count时的互斥
int read_count=0;//在读对象的数量
2.作者进程的结构
代码如下:
do{
wait(rw_mutex);
...
/*写操作*/
...
signal(rw_mutex);
}while(true)
3.读者进程的结构
代码如下:
do{
wait(mutex);
read_count++;//读者数量+1
if(read_count==1)
//如果有且仅有1个读者,证明这个读者在等待作者写完
//此时mutex=0,rw_mutex=0,其他读者无法进行阅读
wait(rw_mutex);//等到作者写完。该读者可以开始阅读
signal(mutex);//其他读者可以阅读
...
/*读*/
...
//完成阅读后
wait(mutex);//需要修改读者数量,先占用cpu,防止修改错误
read_count--;
if(read_count==0)
signal(rw_mutex);
signal(mutex);
}while(true)