//写者部分
do
{
wait(WMutex);//互斥,防止多个进程同时访问writeCount变量
writeCount++;
if(writeCount == 1)
wait(read);
signal(WMutex);
wait(wrt);//写写互斥
//WriteCode...
signal(wrt);
wait(WMutex);//互斥,防止多个进程同时访问writeCount变量
writeCount--;
if(writeCount == 0)
signal(read);
signal(WMutex);
}while(true)
//读者部分
do
{
wait(read);//当有写进程到来时不能读,优先写
signal(read);//这里是为了允许多个读进程一起读
wait(RMutex);//互斥,防止多个进程同时访问readCount变量
readCount++;//当有写进程到来时,这里是到达不了的,所以写进程来之前到来的读进程读完即进入写进程
if(readCount == 1)
wait(wrt);
signal(RMutex);
//ReadCode...
wait(RMutex);//互斥,防止多个进程同时访问readCount变量
readCount--;
if(readCount == 0)
signal(wrt);
signal(RMutex);
}while(true)
读者写者问题中写者优先的想法
最新推荐文章于 2022-09-06 23:59:02 发布