读者优先:
1.写者、读者互斥访问文件资源。
2.多个读者可以同时访问文件资源。
3.只允许一个写者访问文件资源。
具体实现:
1.设置信号量fileSrc实现读写者对临界资源的访问。
2.设置计数器readCount来统计访问临界资源的读者数目,设置信号量readCountSignal完成对readCount计数器资源的互斥访问。
1.写者、读者互斥访问文件资源。
2.多个读者可以同时访问文件资源。
3.只允许一个写者访问文件资源。
具体实现:
1.设置信号量fileSrc实现读写者对临界资源的访问。
2.设置计数器readCount来统计访问临界资源的读者数目,设置信号量readCountSignal完成对readCount计数器资源的互斥访问。
/*初始化读者队列为0,文件资源的初始值为1*/
int readCount = 0;
semaphore readCountSignal = 1;
reader()
{
while(true)
{
wait(readCountSignal); //申请读者队列计数器
if(!readCount) //如果读者队列为空,申请文件资源
wait(fileSrc);
readCount++;
signal(readCountSignal); //释放读者计数器资源
...
perform read operation //执行临界区代码
...
wait(readCountSignal); //申请读者计数器资源
readCount--;
if(!readCount) //如果读者队列为空,释放文件资源
signal(fileSrc);
signal(readCountSignal); //释放读者计数器资源
}
}
writer()
{
while(true)
{
wait(file); //申请文