问题:
一些读者和一些写者对同一个黑板进行读写。多个读者可同时读黑板,但一个时刻只能有一个写者,读者写者不能同时使用黑板。对使用黑板优先级的不同规定使读者-写者问题又可分为几类。第一类问题规定读者优先级较高,仅当无读者时允许写者使用黑板。
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); //释放黑板资源; } }