问题:

一些读者和一些写者对同一个黑板进行读写。多个读者可同时读黑板,但一个时刻只能有一个写者,读者写者不能同时使用黑板。对使用黑板优先级的不同规定使读者-写者问题又可分为几类。第一类问题规定读者优先级较高,仅当无读者时允许写者使用黑板。


P,V原语实现:

进程:  writer-写者进程     reader-读者进程

定义变量:

  mutex=1;    //黑板资源

  reader_mutex=1; //控制读者间的互斥

  r_count=0;  //统计读者人数


//reader - 读者进程
{
     while(true)
     {
        p(reader_mutex);   //控制读者的互斥,防止出现两个读者同时执行reader_count++,而reader_count只加1;
        reader_count++;    //要使用黑板的读者人数加1;
        if(reader_count==1)
            p(mutex);      //如果是第一个读者,就要申请黑板;
            v(reader_mutex);  //释放变量,让下一个读者可以进来读黑板;
            read();        //进行读黑板操作;
            p(reader_mutex);
            reader_count--; //读者读完黑板后,读者人数要减1,同样也要考虑互斥的情况;
            if(reader_count==0)
            v(mutex);        //如果是最后一个读者,就要释放黑板资源;
            v(reader_mutex);
}



//writer - 写者进程
{
   while(true)
   {
       p(mutex);     //申请黑板资源;
       write();      //进行写操作;
       v(mutex);     //释放黑板资源;
   }
}