PV操作每日一题-读者写者问题


一、问题描述

要求:

  1. 允许多个读者可以同时对文件进行执行读操作
  2. 只允许一个写者往文件中写信息
  3. 任一写者在完成写作操作之前不允许其他读者或写着进入缓冲区
  4. 写着执行写操作之前,应让已有的写者和读者全部退出

使用PV操作求解该问题


二、读者优先

int readercount=0;
semaphore mutex=1;
semaphore readermutex=1;

reader()
{
    
    
    while(1)
    {
    
    
        P(readermutex);
        if(readercount==0)
        {
    
    
            P(mutex);
        }
        readercount++;
        V(readermutex);
        读文件;
        P(readermutex)
        readercount--;
        if(readercount==0)
        {
    
    
            V(mutex);
        }
        V(readercount);
    }
}

writer()
{
    
    
    while(1)
    {
    
    
        P(mutex)
        写文件;
        V(mutex);
    }
}



三、写者优先

int readercount=0;
semaphore mutex=1;
semaphore writermutex=1;
semaphore readermutex=1;

reader()
{
    
    
    while(1)
    {
    
    
        P(writermutex);//是否有写者在用缓冲区
        P(readermutex);
        if(readercount==0)
        {
    
    
            P(mutex);
        }
        readercount++;
        V(readermutex);
        V(writermutex);
        读文件;
        P(readermutex)
        readercount--;
        if(readercount==0)
        {
    
    
            V(mutex);
        }
        V(readercount);
    }
}

writer()
{
    
    
    while(1)
    {
    
    
        P(writermutex);//是否有其他写者在用缓冲区
        P(mutex)
        写文件;
        V(mutex);
        V(writermutex);
    }
}



Guess you like

Origin blog.csdn.net/liangsena/article/details/121215644