1、问题描述
一个数据文件可被多个进程共享,只要求读文件的进程称为“Reader进程”,只要求写文件的进程称为“Writer进程”。允许多个进程同时读文件,不允许一个“Writer”进程同其他“Reader”进程或“Writer”进程同时访问共享文件,会引起混乱。所谓读者-写者问题,是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题。
2、利用记录型信号量解决读者-写者问题
semaphore rmutex = 1,wmutex = 1;
int readcount = 0;
void reader(){
while(true){
wait(rmutex);
if(readcount == 0){
wait(wmutex);
}
readcount ++;
signal(rmutex);
...
perform read operation
...
wait(rmutex)
readcount --;
if(readcount == 0){
signal(wmutex);
}
signal(rmutex);
}
}
void writer(){
while(true){
wait(wmutex);
...
perform write operation
...
signal(wmutex);
}
}