Coarse-Grained lock 粗粒度锁

用一个锁Lock一组相关的对象

  • Coarse-Grained lock 粗粒度锁_第1张图片
  • 有时,需要按组来修改多个对象.
  • 这样,在需要锁住其中一个的时候,必须连带地将其他的对象都上锁.
  • 为每一个对象都加上一个锁是很繁琐的.
  • 粗粒度锁是覆盖多个对象的单个锁.
    • 简化了加锁行为.
    • 且不必为了给它们加锁而加载所有对象.
  • 运行机制
  • 为一组对象建立一个控制点.
    • 使用乐观离线锁让组中每个对象共享一个版本号来建立一个控制点.
      • Coarse-Grained lock 粗粒度锁_第2张图片
      • 增加这个版本号时,就成为一个锁住组中所有对象的共享锁.
      • 需要在模型中指定该组的每个对象.
      • 共享的悲观离线锁要求组中每个对象共享某种锁标记.
        • 通过这个锁标记来锁住它们.
        • 一个共享的版本对象就是最好的锁标记.
    • 作为数据修改的基本单位的一组相关对象可看成一个aggregate聚集.
    • Coarse-Grained lock 粗粒度锁_第3张图片
        • 每个聚集有唯一的,提供了对集合中各成员访问的根对象.
        • 以及定义聚集中包含了什么的边界对象.
        • 锁住根对象的根锁提供了聚集的单一控制点.
        • 需要为聚集对象提供到根对象的导航方法.
  • 使用时机
    • 最明显的理由是为了满足业务需要.
    • 好处是以很小的代价来获取和释放锁.
  • Implicit Lock隐含锁
    • Coarse-Grained lock 粗粒度锁_第4张图片
    • 允许框架或层超类型获取离线锁.
      • 必须的加锁认为不应该显示地由开发人员完成,而是隐含地由应用完成.
    • 运行机制
      • 实现隐含锁就是要分解代码.在APP框架中完成那些绝对不能忽略的锁机制.
      • 第一步是列出业务事务中那些任务必须在加锁情况下完成.

你可能感兴趣的:(Lock)