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:排隊鎖請求

發佈了75 篇原創文章 · 獲贊 29 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章