读写锁
在前面的实现中,像dlist_length这类的查询函数也要加锁,那样才能保证在查询过程中对象的状态不会被其它线程所改变。加锁阻止了其它线程修改对象,也阻止其它线程查询对象。如果大多数情况下,线程只是查询对象的状态而不修改它,这种设计不是一种高效的方法,因为它不允许多个线程同时查询。我们能不能实现一种锁,它能串行化对数据结构的修改,而同时支持并行的查询呢?
这就是所谓的读写锁,也称为共享-互斥锁。这种锁在数据库管理系统中(DBMS)和操作系统内核中大量应用,作为系统程序员,了解它的实现机制是有必要的。这里我们请读者实现读写锁,要求如下:
o 不依赖于特定平台。
o 在任何情况下都不带来额外的性能开销。
记住多想多练不要偷懒,学习知识点不是我们最重要的目标,知识点能帮你解决别人解决过的问题,但对你解决新问题未必有多大好处,真正的程序员不应当只是解决问题方案的贩卖者。不断从思考中学习解决问题的方法,加上灵活应用已经掌握的知识点,你的设计水平才会大大提高,这也是《系统程序员成长计划》努力的目标。
分享到:
相关推荐
积分管理系统java源码 ...汇总java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识 TheAlgorithms Github地址: 算法与数据结构
本项目大部分内容来自我近几年的收集和整理,根据计划将主要包含:Java相关知识、网络编程、并发编程、微服务、Linux、数据库、数据结构、算法等知识内容。本人对有深度的系列文章情有独钟,所以整理过程中会更加...
java8 集合源码分析 JavaBooks ...12.程序员成长 高效程序员的45个习惯 99.其他 详细推荐书单 基础入门 Java编程思想(Thinking in Java)、Java核心技术(Core Java) ,Java8 实战(Java in action),Eff
如果我们通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。 在工作中发现我身边的人真的就是实力越强的越努力,最高级的自律,享受孤独。 整理收录一份Java核心知识图谱 ...
Java快速成长学习路线 @学习路线根据黑马程序员学习路线改编 Part1: Java基础&Web基础 Java基础 面向对象思想 集合框架 IO流 多线程与并发 异常处理 网络编程 数据库 MySQL Oracle JDBC C3P0 Druid 前端技术 HTML ...
着力让读者在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,具体包括面向对象程序设计、反射与代理、接口与内部类、异常处理、泛型程序设计、集合框架、事件监听器模型、图形用户界面设计和并发...
生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识 :该项目是一系列小而专注的教程 - 每个教程都涵盖 Java 生态系统中单一且定义...
Java开发者的高级知识,涵盖高并发、分布式系统、高可用、微服务、海量数据处理等。 2 很棒的编程书籍列表。 3 Java 虚拟机基本原理的总结。 4 任何编程语言的 LeetCode 解决方案。 5 程序员面试问题合集。 主要内容...
Java开发者的高级知识,涵盖高并发、分布式系统、高可用、微服务、海量数据处理等。 2 很棒的编程书籍列表。 3 Java 虚拟机基本原理的总结。 4 任何编程语言的 LeetCode 解决方案。 5 程序员面试问题合集。 主要内容...
4.12.6 屏蔽窗口右上角的关闭 操作 196 4.12.7 调用执行外部的程序 197 本章常见技术面试题 197 常见面试技巧之经典问题巧回答 198 本章小结 198 第5章 数据库开发 199 5.1 ADO.NET与抽水的故事 200 5.1.1 ADO.NET...
4.12.6 屏蔽窗口右上角的关闭 操作 196 4.12.7 调用执行外部的程序 197 本章常见技术面试题 197 常见面试技巧之经典问题巧回答 198 本章小结 198 第5章 数据库开发 199 5.1 ADO.NET与抽水的故事 200 5.1.1 ADO.NET...
然而,面对庞大的用户群体和高并发的购票请求,传统的购票系统可能会遇到一系列的挑战,例如系统崩溃、购票失败等问题。 为了解决这些问题,一款名为py12306的高效分布式多账号、多任务购票系统应运而生。 本文讲...