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 是默认的定义。


  • 相关阅读:
    浅谈ASP.NET核心对象
    SQL MID() 函数
    如何查看linux系统CPU利用率 简单
    canvas 学习笔记 简单
    linux 为用户设定、修改密码 passwd 简单
    转crontab用法(例子) 简单
    mongodb加入系统服务 简单
    转导出csv文件时,处理分隔符问题 简单
    tar和gzip、unzip命令详解 简单
    linux创建用户命令 简单
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14049134.html
Copyright © 2011-2022 走看看