IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

有关读写锁

kernelchina blogs 2012-07-07 23:35:04 累计浏览 2,588 次
本机暂存

    为什么需要用读写锁。

    读写锁用于single thread写,多个thread读的情况。在没有发明读写锁之前,我们当然可以对所有的thread使用Mutex来控制资源访问。但是在这个场景中,两个thread读取数据没有必要进行互斥,读写锁应运而生,是的这种场景下所有拿到读锁的thread可以并行执行。

    读写锁的实现。

    实现:在多核系统中读写锁的实现一般是基于SpinLock,Linux就是如此。

    抢占策略:写优先还是读优先。这个都可以,我觉得写优先比较好一点,因为一般此类应用读thread占多数,如果读优先则写锁线程可能被饿死。

    读锁的upgrade和downgrade。

    有的时候在读到一半的时候,可能突然又要想写点什么东西,此时不能直接拿写锁,一定会死锁。只能关掉读锁来重新竞争写锁。这时候可以引入读锁的upgrade来使其直接升级为写锁。这个时候就涉及到三个优先级:写优先、读优先还是升级优先,具体那个优先可以视实际的需求而定。我觉得“升级>写>读”这个顺序看起来比较顺眼。

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 大并发下的高性能编程 – 改进的(用户态)自旋锁 (累计阅读 9,044)
  2. 浅析C++多线程内存模型 (累计阅读 8,804)
  3. C++ 多线程编程总结 (累计阅读 8,099)
  4. 并发编程系列之一:锁的意义 (累计阅读 7,575)
  5. 两个精彩的比喻:吞吐量和延迟、信号量和互斥锁 (累计阅读 7,501)
  6. 无锁HashMap的原理与实现 (累计阅读 6,746)
  7. 从Java视角理解CPU上下文切换(Context Switch) (累计阅读 6,586)
  8. Nginx源码分析-事件循环 (累计阅读 6,259)
  9. 学习:一个并发的Cache (累计阅读 6,105)
  10. Unix高级环境编程系列笔记 (累计阅读 5,980)