读写锁
在前面的实现中,像dlist_length这类的查询函数也要加锁,那样才能保证在查询过程中对象的状态不会被其它线程所改变。加锁阻止了其它线程修改对象,也阻止其它线程查询对象。如果大多数情况下,线程只是查询对象的状态而不修改它,这种设计不是一种高效的方法,因为它不允许多个线程同时查询。我们能不能实现一种锁,它能串行化对数据结构的修改,而同时支持并行的查询呢?
这就是所谓的读写锁,也称为共享-互斥锁。这种锁在数据库管理系统中(DBMS)和操作系统内核中大量应用,作为系统程序员,了解它的实现机制是有必要的。这里我们请读者实现读写锁,要求如下:
o 不依赖于特定平台。
o 在任何情况下都不带来额外的性能开销。
记住多想多练不要偷懒,学习知识点不是我们最重要的目标,知识点能帮你解决别人解决过的问题,但对你解决新问题未必有多大好处,真正的程序员不应当只是解决问题方案的贩卖者。不断从思考中学习解决问题的方法,加上灵活应用已经掌握的知识点,你的设计水平才会大大提高,这也是《系统程序员成长计划》努力的目标。