mnesia的锁机制


一、基本概念

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:排队锁请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值