我对读写锁不太确定,需要有人帮忙确认以下关于读写锁的事实是否正确。
这是一般数据库的参考。
读锁:
- 多个线程可以同时获取多个读锁。
- 当一个线程在行/表上有读锁时,不能有其他线程更新/插入/删除该表的数据。(即使尝试写入数据的线程不需要写锁。)
- 一行/表不能同时拥有读锁和写锁。
写锁:
- 当一行/表被写锁定时,如果其他线程具有已实现的读锁,则另一个线程无法读取它,但如果没有实现读锁(即简单的选择查询),则其他线程可以读取它。
感谢澄清。我在互联网上找不到直接证明这些说法的内容。
我对读写锁不太确定,需要有人帮忙确认以下关于读写锁的事实是否正确。
这是一般数据库的参考。
读锁:
写锁:
感谢澄清。我在互联网上找不到直接证明这些说法的内容。
读锁:
多个线程可以同时获取多个读锁。
正确。多个读锁可以同时存在。(读锁又称为共享锁)
当一个线程对一行/表具有读锁时,其他线程不能对该表执行更新/插入/删除数据的操作。(即使尝试写入数据的线程不需要写锁)
正确。写事务应等待读锁完成读取。
一行/表不能同时具有读锁和写锁。
正确。如果先持有写锁再持有读锁,则写锁将阻止其他事务读取或写入同一表。如果先持有读锁再持有写锁,则读锁将阻止写事务,直到读取事务完成。
写锁:
当行/表具有写锁时,如果其他线程已经实现了读锁,则它们无法读取该行/表,但如果没有实现读锁(即简单的Select查询),则其他线程可以读取。
抱歉,我不理解这句话的意思。 但是,当一个表具有写锁(独占锁)时,其他事务无法读取或写入。
这取决于所使用的隔离级别。