• 信号量机制读者/写者问题写者优先的理解


    int readcount=0,writecount=0;
    semaphore x=1,y=1,z=1;//x用来对readcount进行互斥访问,y用来对writecount进行互斥访问,z用来对使用读锁进行互斥访问
    semaphore rmutex=1;wmutex=1;//读锁,写锁

    由于写者优先,我们从读者优先的代码中得到灵感,这里可以给写者也添加一个记录写者数量的int型变量,当这个变量为0的时候,才允许写者访问临界区

    写者的优先,也使得这里不能采用常用的单信号量访问机制,而是通过由读者和写者共同决定的rmutex来对读者进行限制,做到保证写者高优先级的同时读者自己又能够进入临界区同时可以多个读者一起读(这也是和其他的读写问题根本不同的地方)

    最外层的z信号量由读者自己控制,而rmutex则由写者和读者共同控制,这样就保证了写者的优先级得到了保障

    process reader{
    p(z);//用来保证判断一次只有一个读者,即保证次序
    p(rmutex);//这个信号量过后就能确保当前临界区中是没有写者的(这个是关键点)
    p(x);
    readcount++;
    if(readcount==1)
    p(wmutex);//如果现在有一个读者,那么往后优先级更高的写者不能进来
    v(x);//释放对radcount的访问权限
    v(rmutex);//释放对p(x)的访问权限
    v(z);
    read;
    p(x);
    readcount--;
    if(readcount==0)
    v(wmutex);
    v(x);
    }
    process writer{
    p(y);
    writecount++;
    if(writecount==1)
    p(mutex);
    v(y);
    p(wmutex);
    write;
    v(wmutex);
    p(y);
    writecount--;
    if(writecount==0)
    v(rmutex);
    v(y);
    }
  • 相关阅读:
    [BigData:Hadoop]:安装部署篇
    FPGA_状态机工作原理
    Python基础-1-环境搭建(初体验)
    SpringCloud与Dubbo的区别
    使用香橙派 在Linux环境中安装并学习Python
    Windows系统VisualSVN-Server下载安装和配置
    路由策略简介
    3D怎么看模型内部结构---模大狮模型网
    假如我有一台服务器,我会让它提供三种服务
    基于FPGA的PID控制器设计
  • 原文地址:https://www.cnblogs.com/zirconium/p/16922966.html