mnesia的锁机制
2016-04-06 00:49
1571 查看
一、基本概念
1、mnesia的锁不是操作系统级别的锁;
2、一个mnesia结点中,所有的锁由单独的mnesia_locker进程进行管理;
3、其它进程对锁的申请和释放通过发送消息到mnesia_locker进程实现;
4、A进程请求锁时,发送的同步消息如果当时获取到了锁,则返回获取到的锁消息;如果没有,则将锁请求加入等待队列,A进程阻塞等待返回;
5、B进程进行释放锁时,发送同步消息给mnesia_locker进程,检查等待队列,让其中满足条件的锁请求返回,返回给原来获取锁请求的A进程成功消息,A进程成功获得锁;
6、集群中,写锁需要对所有结点进行加锁后才返回;
二、数据结构
锁管理器一共有四张锁表(ets表):
1、mnesia_held_locks:表锁或行锁
记录数据为 {Oid, Op, [ {Op2, Tid2} | {Op1, Tid1}]}
Oid = {Table,Key} Op = read | write (如果请求锁的都是读则为read,有写则为write) Tid申请的id
mnesia_tid_locks:一个事务涉及的所有锁
mnesia_sticky_locks:粘着锁
mnesia_lock_queue:排队锁请求
1、mnesia的锁不是操作系统级别的锁;
2、一个mnesia结点中,所有的锁由单独的mnesia_locker进程进行管理;
3、其它进程对锁的申请和释放通过发送消息到mnesia_locker进程实现;
4、A进程请求锁时,发送的同步消息如果当时获取到了锁,则返回获取到的锁消息;如果没有,则将锁请求加入等待队列,A进程阻塞等待返回;
5、B进程进行释放锁时,发送同步消息给mnesia_locker进程,检查等待队列,让其中满足条件的锁请求返回,返回给原来获取锁请求的A进程成功消息,A进程成功获得锁;
6、集群中,写锁需要对所有结点进行加锁后才返回;
二、数据结构
锁管理器一共有四张锁表(ets表):
1、mnesia_held_locks:表锁或行锁
记录数据为 {Oid, Op, [ {Op2, Tid2} | {Op1, Tid1}]}
Oid = {Table,Key} Op = read | write (如果请求锁的都是读则为read,有写则为write) Tid申请的id
mnesia_tid_locks:一个事务涉及的所有锁
mnesia_sticky_locks:粘着锁
mnesia_lock_queue:排队锁请求
相关文章推荐
- 2010年清华大学计算机研究生机试真题
- 游戏逻辑底层,MainLoop&&FSM&&MSG(一)
- Http
- 文章标题
- mysql 四中隔离级别
- Android 蓝牙4.0(BLE) 理解--紧随智能家居和可穿戴设备潮流
- 分享《Android Application Secure Design/Secure Coding Guidebook》
- 最大连续子数组和
- 笔记
- 自定义控件之——音频图
- Win7下安装配置Java
- Android 网络: Volley+OkHttp+Https
- 项目迁移总结
- XSS学习笔记(一) 概念、基本原理、简单实例及危害
- 疯狂javaee jsp自定义带属性标签访问数据库java.lang.NullPointerException
- 去除重复的用户,按倒序排列,插入另一张表
- LeetCode : Trapping Rain Water (java)
- 设计模式总结
- Storm 实时云计算 学习使用 包括基本api 以及 高层次api trident 的基本使用
- 线程状态图