Coarse-Grained lock 粗粒度锁
- 用一个锁Lock一组相关的对象

- 有时,需要按组来修改多个对象.
- 这样,在需要锁住其中一个的时候,必须连带地将其他的对象都上锁.
- 为每一个对象都加上一个锁是很繁琐的.
- 粗粒度锁是覆盖多个对象的单个锁.
- 简化了加锁行为.
- 且不必为了给它们加锁而加载所有对象.
- 运行机制
- 为一组对象建立一个控制点.
- 使用乐观离线锁让组中每个对象共享一个版本号来建立一个控制点.

- 增加这个版本号时,就成为一个锁住组中所有对象的共享锁.
- 需要在模型中指定该组的每个对象.
- 共享的悲观离线锁要求组中每个对象共享某种锁标记.
- 通过这个锁标记来锁住它们.
- 一个共享的版本对象就是最好的锁标记.
- 作为数据修改的基本单位的一组相关对象可看成一个aggregate聚集.

- 每个聚集有唯一的,提供了对集合中各成员访问的根对象.
- 以及定义聚集中包含了什么的边界对象.
- 锁住根对象的根锁提供了聚集的单一控制点.
- 需要为聚集对象提供到根对象的导航方法.
- 使用时机
- 最明显的理由是为了满足业务需要.
- 好处是以很小的代价来获取和释放锁.
- Implicit Lock隐含锁

- 允许框架或层超类型获取离线锁.
- 必须的加锁认为不应该显示地由开发人员完成,而是隐含地由应用完成.
- 运行机制
- 实现隐含锁就是要分解代码.在APP框架中完成那些绝对不能忽略的锁机制.
- 第一步是列出业务事务中那些任务必须在加锁情况下完成.
Coarse-Grained lock 粗粒度锁的更多相关文章
- [C#基础]说说lock到底锁谁?
写在前面 最近一个月一直在弄文件传输组件,其中用到多线程的技术,但有的地方确实需要只能有一个线程来操作,如何才能保证只有一个线程呢?首先想到的就是锁的概念,最近在我们项目组中听的最多的也是锁谁,如何锁 ...
- Java 线程锁机制 -Synchronized Lock 互斥锁 读写锁
(1)synchronized 是互斥锁: (2)ReentrantLock 顾名思义 :可重入锁 (3)ReadWriteLock :读写锁 读写锁特点: a)多个读者可以同时进行读b)写者必须互斥 ...
- JUC--Callable 以及Lock同步锁
/** * 一.创建执行线程的方式三:实现Callable接口.相较于实现Runnable接口方式,方法可以有返回值,并且可以抛出异常 * 二.callable 需要FutureTask实现类的支持. ...
- C# 说说lock到底锁谁?(1)
写在前面 最近一个月一直在弄文件传输组件,其中用到多线程的技术,但有的地方确实需要只能有一个线程来操作,如何才能保证只有一个线程呢?首先想到的就是锁的概念,最近在我们项目组中听的最多的也是锁谁,如何锁 ...
- redis,缓存雪崩,粗粒度锁,缓存一致性
1, redis单线程为什么快 io多路复用技术 单线程避免多线程的频繁切换问题 memcache缺点 kv形式数据 没有持久化mongodb 海量数据的访问效率 mr的计算模型文档就是类似json的 ...
- C# 说说lock到底锁谁?(2)
摘要 今天在园子里面有园友反馈关于[C#基础]说说lock到底锁谁?文章中lock(this)的问题.后来针对文章中的例子,仔细想了一下,确实不准确,才有了这篇文章的补充,已经对文章中的demo进行修 ...
- [C#基础]说说lock到底锁谁?(补充与修改)
摘要 今天在园子里面有园友反馈关于[C#基础]说说lock到底锁谁?文章中lock(this)的问题.后来针对文章中的例子,仔细想了一下,确实不准确,才有了这篇文章的补充,已经对文章中的demo进行修 ...
- spin lock自旋锁 双链表操作(多线程安全)(Ring0)
通过spin lock自旋锁 ,为每个链表都定义并初始化一个锁,在需要向该链表插入或移除节点时不使用前面介绍的普通函数,而是使用如下方法: ExInterlockedInsertHeadList(&a ...
- 多线程安全问题之Lock显示锁
package com.hls.juc; import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.Reentr ...
随机推荐
- [Angular 2] ElementRef, @ViewChild & Renderer
ElementRef: In Angular2 Doc, it suggest to "avoid" using ElementRef. It access DOM directl ...
- SVN “工作副本 “...” 已经锁定”的解决的方法
svn更新到一半出错,再更新提示已经锁定,清理一下就好了
- 依赖注入框架Autofac的简单使用
http://www.cnblogs.com/liping13599168/archive/2011/07/16/2108209.html Autofac是一款IOC框架,比较于其他的IOC框架,如S ...
- 20 Free Open Source Web Media Player Apps
free Media Players (Free MP3, Video, and Music Player ...) are cool because they let web developers ...
- 在Dropbox上搭建私有的Git仓库的教程
导读 Git版本控制系统需要一个服务器端,而GitHub上要想创建私有的Git服务器端仓库则触及到收费项目,于是这里我们利用Dropbox的免费空间,来看一下在Dropbox上搭建私有的Git仓库的教 ...
- webrtc学习(二): audio_device之opensles
audio_device是webrtc的音频设备模块. 封装了各个平台的音频设备相关的代码 audio device 在android下封装了两套音频代码. 1. 通过jni调用java的media ...
- SQL Server 的事务和锁(一)
最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT @ ...
- SQL SERVER – Count Duplicate Records – Rows
SELECT YourColumn, COUNT(*) TotalCount FROM YourTable GROUP BY YourColumn HAVING COUNT(*) > 1 ORD ...
- 【开源项目11】组件间通信利器EventBus
概述及基本概念 **EventBus**是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间 的通信.比如请求网络,等网络返回时通过Han ...
- 使用Nginx SSI功能辅助HTML页面设计
SSI,Server Side Include,支持html静态文件内以 <!--#include file="/layout/header.html"--> 的方式 ...