🎯 什麼情境該想到我
當你「有一組彼此相關的物件(聚合),想用一把鎖一次鎖住全部,避免只鎖到一部分」的時候。
⚙️ 怎麼用(步驟 / 公式)
意圖:用單一把鎖涵蓋一整組相關物件,讓它們作為一個單位一起被鎖定與釋放。
做法要點:
- 為一組相關物件(如聚合)指定一個共用的鎖點。
- 常見做法:共用版本(shared version)——整組共用一個版本號;或以根物件(root)作為鎖的持有點。
- 鎖住根,即等於鎖住整組;一次鎖全部,不會有部分鎖漏。
- 常與樂觀/悲觀離線鎖搭配,決定鎖定的顆粒度。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 顆粒度太粗會降低並發(動一個小物件也鎖住整組)。
- 需要清楚定義「哪些物件屬於同一組」(聚合邊界)。
- 物件間關聯鬆散、可獨立變動時,粗粒度鎖反而綁太多。
🔗 相關工具
- 樂觀離線鎖 Optimistic Offline Lock(可用共用版本實作整組的樂觀鎖)
- 悲觀離線鎖 Pessimistic Offline Lock(可用根物件作為整組的鎖點)
- 隱含鎖 Implicit Lock(讓框架自動維護整組鎖,避免漏鎖)
- 企業應用架構模式