---
# System prepended metadata

title: Joanne - Lock 應用：如何避免同時取到同一組序號

---

# Joanne - Lock 應用：如何避免同時取到同一組序號

> https://hackmd.io/@6bi6vopiQTum8mTAnTwhfQ/HygZLJFMt

## 鎖定類型 Lock types
Shared lock (S)：執行 select 指令時發生，相容於 Shared 與 Update 等 lock。
Exclusive lock (X)：執行 insert、update 與 delete 時發生，不會相容於任何一個 lock。
Update lock (U)：要求執行 select 指令時，使用 Update lock 一直保留到指令或是 Transaction 結束。

- Lock 必須等待不相容的 Lock 釋放掉，才能往下進行自己的工作，而相容的 Lock 則可以同時存在
- 查詢時下 UPDLOCK 可以防止 Lock 互等的狀況發生，因為同樣的 SELECT 要等先前的 UPDLOCK 做完 transaction 才能做自己的任務 (SQL server 適用)
- Monitor - 有 TryEnter 可以設定等待 timeout 時間避免無限 deadlock