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

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

Coarse-Grained lock 粗粒度锁的更多相关文章

  1. [C#基础]说说lock到底锁谁?

    写在前面 最近一个月一直在弄文件传输组件,其中用到多线程的技术,但有的地方确实需要只能有一个线程来操作,如何才能保证只有一个线程呢?首先想到的就是锁的概念,最近在我们项目组中听的最多的也是锁谁,如何锁 ...

  2. Java 线程锁机制 -Synchronized Lock 互斥锁 读写锁

    (1)synchronized 是互斥锁: (2)ReentrantLock 顾名思义 :可重入锁 (3)ReadWriteLock :读写锁 读写锁特点: a)多个读者可以同时进行读b)写者必须互斥 ...

  3. JUC--Callable 以及Lock同步锁

    /** * 一.创建执行线程的方式三:实现Callable接口.相较于实现Runnable接口方式,方法可以有返回值,并且可以抛出异常 * 二.callable 需要FutureTask实现类的支持. ...

  4. C# 说说lock到底锁谁?(1)

    写在前面 最近一个月一直在弄文件传输组件,其中用到多线程的技术,但有的地方确实需要只能有一个线程来操作,如何才能保证只有一个线程呢?首先想到的就是锁的概念,最近在我们项目组中听的最多的也是锁谁,如何锁 ...

  5. redis,缓存雪崩,粗粒度锁,缓存一致性

    1, redis单线程为什么快 io多路复用技术 单线程避免多线程的频繁切换问题 memcache缺点 kv形式数据 没有持久化mongodb 海量数据的访问效率 mr的计算模型文档就是类似json的 ...

  6. C# 说说lock到底锁谁?(2)

    摘要 今天在园子里面有园友反馈关于[C#基础]说说lock到底锁谁?文章中lock(this)的问题.后来针对文章中的例子,仔细想了一下,确实不准确,才有了这篇文章的补充,已经对文章中的demo进行修 ...

  7. [C#基础]说说lock到底锁谁?(补充与修改)

    摘要 今天在园子里面有园友反馈关于[C#基础]说说lock到底锁谁?文章中lock(this)的问题.后来针对文章中的例子,仔细想了一下,确实不准确,才有了这篇文章的补充,已经对文章中的demo进行修 ...

  8. spin lock自旋锁 双链表操作(多线程安全)(Ring0)

    通过spin lock自旋锁 ,为每个链表都定义并初始化一个锁,在需要向该链表插入或移除节点时不使用前面介绍的普通函数,而是使用如下方法: ExInterlockedInsertHeadList(&a ...

  9. 多线程安全问题之Lock显示锁

    package com.hls.juc; import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.Reentr ...

随机推荐

  1. SSI框架中配置log4j

    事实上主要是log4j配置,跟SSI关系不大. web.xml中加入 <context-param> <param-name>log4jConfigLocation</p ...

  2. 微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )

    接着上次的理论,我们这次来研究用代码实现“网页授权获取用户基本信息”,首先我们需要一个链接指向微信的授权页面,在微信开发平台中已经说了,这个链接必须在微信客户端中打开,那么我们就干脆使用文本消息来完成 ...

  3. c++笔试题两道,求解当中一道

    1.Implement a functionthat prints the numbers from 1 to 100.But for multiples of three(3) print &quo ...

  4. except ShortInputException,x中逗号

    class ShortInputException(Exception): def __init__(self, length, atleast): Exception.__init__(self) ...

  5. cocos2d-x中CCTextureCache图片资源的异步加载

    如果没有预先加载图片,则可以通过addImageAsync()函数实现异步加载,该函数通过创建一个加载线程来加载图片,并且在主线程中通过调用回调函数来读取该图片资源纹理.其主要过程如下: 1.创建线程 ...

  6. 0c-36-自动释放池应用场景

    .autorelease的应用场景 经常用来在类方法中快速创建1个对象. // 声明实现一个类方法 + (Student *)student { // 在里面直接进行autorelease retur ...

  7. CENTOS YUM软件源

    CentOS 7.0 使用 YUM 安装 MySQL 报错 问题现象 CentOS 7.0 使用 YUM 安装 MySQL 时出现类似如下错误信息: File contains no section ...

  8. HTML5本地存储 localStorage

    HTML5的本地存储是大势所趋,如果仅存储在内存中,则是sessionStorage,他们的语法都是一样,仅仅是一个存储在本地文件系统中,另一个存储在内存中(随着浏览器的关闭而消失),其语句如下: l ...

  9. 给大家普及一下CPU和SOC的基本知识,好让大家在盲目喝彩做出基本的判断

    转载:http://bbs.tianya.cn/post-worldlook-544367-1.shtml 目前,华为推出了自己的四核手机,用自己的SOC,所以很多不明就里的人开始嚷嚷国产处理器的骄傲 ...

  10. 《嵌入式Linux基础教程学习笔记一》

    常用书目下载地址:http://www.cnblogs.com/pengdonglin137/p/3688029.html 第二章 1.进程上下文和中断上下文(Page20) 当应用程序执行系统调用, ...