读锁定和写锁定

nkn*_*knj 24 database concurrency multithreading locking transactions

我对读写锁定有点不确定,只需要有人检查这些关于读/写锁的事实是否正确.

这是一般的数据库.

读锁:

  1. 多个线程可以同时获取多个读锁.
  2. 当线程在行/表上具有读锁定时,没有线程可以更新/插入/删除该表中的数据.(即使尝试写入数据的线程不需要写入锁定.)
  3. 行/表不能同时具有读取和写入锁定.

写锁:

  1. 当一个行/表具有写锁时,如果它们在其中实现了读锁,则它不能被另一个线程读取,但如果没有实现读锁,则其他线程可以读取它(即简单的选择查询)

谢谢你的澄清.我无法在互联网上找到这些陈述的直接断言.

Gen*_*Wan 15

读锁:

  1. 多个线程可以同时获取多个读锁。

    真的。多个读锁可以同时存在。(读锁还有一个名字:共享锁)

  2. 当线程对行/表具有读锁时,没有线程可以更新/插入/删除该表中的数据。(即使尝试写入数据的线程不需要写锁。)

    真的。写事务应该等待读锁完成读取。

  3. 一个行/表不能同时有读锁和写锁。

    真的。如果在读锁之前有写锁,写锁会阻塞其他事务对同一张表的读或写。如果在写锁之前有读锁,读锁会阻塞写事务,直到读事务完成。

写锁:

  1. 当一个行/表有写锁时,如果在其中实现了读锁,则其他线程无法读取该行/表,但如果没有实现读锁,则其他线程可以读取(即简单的 Select 查询)

    对不起,我不明白这个说法。 但是当一个表有写锁(Exclusive Lock)时,它就不能被另一个事务读取或写入。


Pre*_*raj 9

数据库管理理论中,锁定用于实现多个数据库用户之间的隔离。这是缩写ACID(原子性,一致性,隔离性,耐久性)中的“ I”。TX(事务)将锁定应用于数据,这可能会阻止其他TX在TX的生命周期内访问相同的数据。

简单锁定:可以请求两种主要类型的锁定:

  • 共享锁:读取锁,即任何其他TX都可以读取但不能写入
  • 排他锁:写锁,即没有其他TX可以读写

多重锁定: 两相锁定(2PL)是一种并发控制方法,可确保串行化。

  • 一个增长阶段(或膨胀阶段或第一阶段):获取锁定和无锁被释放。
  • 一个收缩阶段(或第二阶段):锁被释放,不获取任何锁。


ami*_*mit 2

这取决于所使用的隔离级别。