簡體   English   中英

讀鎖和寫鎖

[英]Read Locks and Write Locks

我對讀寫鎖有點不確定,只需要有人來檢查這些關於讀/寫鎖的事實是否正確。

這是一般的數據庫參考。

讀鎖:

  1. 多個線程可以同時獲取多個讀鎖。
  2. 當線程對行/表具有讀鎖時,沒有線程可以更新/插入/刪除該表中的數據。 (即使嘗試寫入數據的線程不需要寫鎖。)
  3. 一個行/表不能同時有讀鎖和寫鎖。

寫鎖:

  1. 當一個行/表有寫鎖時,如果在其中實現了讀鎖,則其他線程無法讀取該行/表,但如果沒有實現讀鎖,則其他線程可以讀取(即簡單的 Select 查詢)

感謝您的澄清。 我在互聯網上找不到對這些陳述的直接斷言。

數據庫管理理論中,鎖用於實現多個數據庫用戶之間的隔離。 這是首字母縮略詞 ACID(原子性、一致性、隔離性、持久性)中的“我”。 鎖定由 TX(事務)應用於數據,這可能會阻止其他 TX 在 TX 的生命周期內訪問相同的數據。

簡單鎖定:可以請求兩種主要類型的鎖定:

  • 共享鎖:讀鎖,即任何其他TX可以讀但不能寫
  • 排他鎖:寫鎖即沒有其他TX可以讀或寫

多重鎖定:兩相鎖定(2PL)是一種保證可串行化的並發控制方法。

  • A Growing/Expanding/First Phase :獲取鎖,不釋放鎖。
  • A Shrinking/Contracting/Second Phase :釋放鎖,不獲取鎖。

讀鎖:

  1. 多個線程可以同時獲取多個讀鎖。

    真的。 多個讀鎖可以同時存在。 (讀鎖還有一個名字:共享鎖)

  2. 當線程對行/表具有讀鎖時,沒有線程可以更新/插入/刪除該表中的數據。 (即使嘗試寫入數據的線程不需要寫鎖。)

    真的。 寫事務應該等待讀鎖完成讀取。

  3. 一個行/表不能同時有讀鎖和寫鎖。

    真的。 如果在讀鎖之前有寫鎖,寫鎖會阻塞其他事務對同一張表的讀或寫。 如果在寫鎖之前有讀鎖,讀鎖會阻塞寫事務,直到讀事務完成。

寫鎖:

  1. 當一個行/表有寫鎖時,如果在其中實現了讀鎖,則其他線程無法讀取該行/表,但如果沒有實現讀鎖,則其他線程可以讀取(即簡單的 Select 查詢)

    對不起,我不明白這個說法。 但是當一個表有寫鎖(Exclusive Lock)時,它就不能被另一個事務讀取或寫入。

這取決於所使用的 隔離級別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM