第六章 设计基于锁的并发数据结构
-
序列化(serialization):多个线程轮流存取互斥元保护的数据,它们必须线性的而非并发的存取数据。
-
如何使得数据结构线程安全的基本原理:
-
保证当数据结构不变性被别的线程破坏时的状态不被任何别的线程看到。
-
注意避免数据结构接口所固有的竞争现象,通过为完整操作提供函数,而不是提供操作步骤。
-
注意当出现例外时,数据结构是怎么样保证不变性不被破坏的。
-
当使用数据结构时,通过限制锁的范围和避免使用嵌套锁,来降低产生死锁的机会。
-
在实行数据结构的并发存取时,设计者需要问问自己:
-
锁的范围能否被限定,使得一个操作的一部分可以在锁外被执行?
-
数据结构的不同部分能否被不同的互斥元保护?
-
是否所有的操作需要同样级别的保护?
-
数据结构的一个小改变能否在不影响操作语义情况下提高并发性的机会?
- 使用条件变量的线程安全队列的完整类定义: