首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读锁写锁

读锁写锁
EN

Stack Overflow用户
提问于 2011-10-10 12:53:02
回答 3查看 50.5K关注 0票数 38

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

这指的是一般的数据库。

读锁:

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

写锁:

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

谢谢你的澄清。我在互联网上找不到对这些声明的直接断言。

EN

回答 3

Stack Overflow用户

发布于 2018-04-15 03:18:03

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

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

  • 共享锁:读锁,即任何其他TX(或多个TX)都可以读但不能写(使用多个txs的锁共享,即共享锁)。
  • 排他锁:写锁,即没有其他TX可以读写(锁不与任何其他txs共享,即排他锁)

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

  • 增长/扩展/第一阶段:获得锁而不释放锁。
  • 收缩/收缩/第二阶段:释放锁而不获取锁。
票数 22
EN

Stack Overflow用户

发布于 2019-02-07 00:04:36

读锁:

  1. 多个读锁可以由多个线程同时获得。 True.多个读取锁可以同时存在。(Read有另一个名称:共享锁)
  2. 当线程在行/表上有读锁时,没有线程可以更新/插入/删除该表中的数据。(即使试图写入数据的线程不需要写锁。) True.写事务应该等待读锁完成读取。
  3. 行/表不能同时具有读锁和写锁。 True.如果在读锁之前有写锁,那么写锁将阻止其他事务来读取或写入相同的表。如果在写入锁之前有读锁,那么读锁将阻止写入事务,直到读取事务完成。

写锁:

  1. 当一个行/表有写锁时,如果另一个线程实现了读锁,它就不能被另一个线程读取,但是如果没有实现读锁(即简单选择查询),其他线程可以读取它。 对不起,我不明白这句话。但是当表有写锁(独占锁)时,它不能被另一个事务读取或写入。
票数 19
EN

Stack Overflow用户

发布于 2011-10-10 12:58:47

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7713049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档