确保线程安全

确保无线程能够看到“不变量”变化时的状态。

小心会引起条件竞争的接口,提供完整操作的函数,而非操作步骤。

注意数据结构的行为是否会产生异常,从而确保“不变量”的状态。

将死锁的概率降到最低。限制锁的范围,避免嵌套锁的存在。

对于使用者有什么限制,当线程通过特殊的函数对数据结构进行访问时,其他的线程还有哪些函数能安全调用?

普通的构造函数和析构函数需要独立访问数据结构,所以用户使用时,就不能在构造函数完成前或析构函数完成后对数据结构进行访问。当数据结构支持赋值操作swap()或拷贝构造时,作为数据结构的设计者,即使线程操纵数据结构中有大量的函数,也需要保证这些操作在并发下是安全的(或确保这些操作能够独立访问),以保证并发访问时不会出错。

操作在锁的范围中进行,是否允许在锁外执行?

所有操作都需要同级互斥量的保护吗?

允许线程并发读取的数据结构并不少见,但修改必须是单线程的,这种结构类似于 std::shared_mutex