• kbmMW作者对于锁机制的论述


    对于TkbmMWLock来说,下面详细说明这个默认的kbmMWREWLock机制是如何运作的?

     
    线程1
          BeginRead
          Work for a longish time
          EndRead
    线程2
          BeginWrite
          Do some work
          EndWrite
    如果Thread1进入BeginRead,那么在上述情况下的BeginWrite将会被阻止,直到调用完EndRead。
    如果锁被定义为读取优先(be biased towards readers),则允许来自其他线程的BeginRead操作,不会被阻止。BeginWrite将继续被阻止,一直到不再有BeginRead操作产生的锁。
    我的理解:对资源来说,BeginWrite必须在其无锁状态下才会执行,否则一直被阻塞。
     
    如果锁被定义为写优先(be biased towards writers),来自其他线程的BeginRead是允许的,但他一直被阻塞,直到EndWrite被执行。
     
    另一个场景:
    线程1:
          BeginRead
          Dosomething
          BeginWrite
          Dosomething
          EndWrite
          EndRead
    如果在锁上启用写锁升级(write lock escalation)(默认),这会将读取锁定升级到写入锁定。
     
    线程1:
          BeginWrite
          BeginRead
          EndRead
          EndWrite
    因为写入锁已经存在,所以将简单地忽略BeginRead / EndRead调用。
     
    可以使用通常表现较差的其他锁机制。
     
    在kbmMWConfig.inc中定义下面其中之一:
    //{$DEFINE KBMMW_SUPPORT_MRWSLOCK}
    //{$DEFINE KBMMW_SUPPORT_MONITORLOCK}
    {$DEFINE KBMMW_SUPPORT_FASTMRWSLOCK}
     
    如果不定义,锁定将使用普通的TCriticalSection锁定,阻塞所有读写操作。
    FASTMRWSLOCK 是默认的定义。


  • 相关阅读:
    HTTPS 深入浅出
    Elasticsearch Analyzer 的内部机制
    Elasticsearch 查看token分析过程
    elasticsearch教程大全
    【DDD】领域驱动设计实践 —— 框架实现
    阿里盒马领域驱动设计实践
    kubernetic
    安装k8s dashboard
    单机版kubernetes1.13安装
    Kubernetes踩坑记录
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14049134.html
Copyright © 2020-2023  润新知