您的位置:首页 > 其它

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:排队锁请求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: