读者写者问题是经典的进程同步问题,此例应解决以下问题:
1、读进程正在操作,写进程不能进入
2、写进程正在操作,读进程不能进入
3、读进程正在操作,其它读进程可以进入
4、写进程正在操作,其它写进程不能进入
解决方法:利用记录型信号量
定义读、写互斥信号量rmutex、wmutex,一个读进程数目整形变量readcount;
wait(mutex),signal(mutex)为对信号量的原语操作
读进程描述:
- wait(rmutex);
- if(readcount == 0)
- wait(wmutex);
- readcount++;
- signal(rmutex);
- /*...
- perform read operation
- ...*/
- wait(rmutex);
- readcount--;
- if(readcount == 0)
- signal(wmutex);
- signal(rmutex);
写进程描述:
- wait(wmutex);
- /*...
- perform write operation
- ...*/
- signal(wmutex);