`
阿尔萨斯
  • 浏览: 4175157 次
社区版块
存档分类
最新评论

系统程序员成长计划-并发(四)(上)

 
阅读更多

读写锁

在前面的实现中,像dlist_length这类的查询函数也要加锁,那样才能保证在查询过程中对象的状态不会被其它线程所改变。加锁阻止了其它线程修改对象,也阻止其它线程查询对象。如果大多数情况下,线程只是查询对象的状态而不修改它,这种设计不是一种高效的方法,因为它不允许多个线程同时查询。我们能不能实现一种锁,它能串行化对数据结构的修改,而同时支持并行的查询呢?

这就是所谓的读写锁,也称为共享-互斥锁。这种锁在数据库管理系统中(DBMS)和操作系统内核中大量应用,作为系统程序员,了解它的实现机制是有必要的。这里我们请读者实现读写锁,要求如下:

o 不依赖于特定平台。
o 在任何情况下都不带来额外的性能开销。

记住多想多练不要偷懒,学习知识点不是我们最重要的目标,知识点能帮你解决别人解决过的问题,但对你解决新问题未必有多大好处,真正的程序员不应当只是解决问题方案的贩卖者。不断从思考中学习解决问题的方法,加上灵活应用已经掌握的知识点,你的设计水平才会大大提高,这也是《系统程序员成长计划》努力的目标。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics