zoukankan      html  css  js  c++  java
  • 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 是默认的定义。


  • 相关阅读:
    EEPlat 的 后台业务处理模型
    poj 1012 Joseph (约瑟夫问题)
    python使用正則表達式
    二维码_encode与decode
    UITableView显示不全
    Bottle 中文文档
    不相交集python实现
    面试题1:落单的数
    Android开发/源代码资源汇总
    leetCode 26.Remove Duplicates from Sorted Array(删除数组反复点) 解题思路和方法
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14049134.html
Copyright © 2011-2022 走看看