Boost C++ 库

...世界上最受尊敬和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

Boost.Flyweight 锁策略参考



目录

初步概念

互斥量(mutex)是一种类型,其对象可以处于两种状态之一,称为锁定和未锁定。当线程 A 锁定互斥量 m,而另一个线程 B 尝试锁定 m 时,B 会被阻塞,直到 A 解锁 m。此外,如果线程可以成功调用已被同一线程锁定的互斥量的锁定操作,则称互斥量支持递归锁定。在这种情况下,线程必须执行与对互斥量执行的锁定操作一样多的解锁操作,才能使互斥量真正解锁。作用域锁(scoped lock)是一种与某种互斥量类型关联的类型,其对象在构造/析构时执行互斥量的锁定/解锁操作。

在下表中,Mutex 是一种互斥量类型,m 是类型为 Mutex 的对象,Lock 是与 Mutex 关联的作用域锁,而 lkLock 的一个值。

互斥量和作用域锁的要求。
表达式 返回类型 断言/注释
前置/后置条件
Mutex m;   后置条件:m 已解锁。
(&m)->~Mutex(); void 前置条件:m 已解锁。
Lock lk(m);   mlk 关联并锁定 m
(&lk)->~Lock(); void 解锁与 lk 关联的互斥量。

这些概念非常相似,但与 Boost 线程库 中描述的同名概念并不完全等价。

锁策略

锁策略描述了互斥量类型和关联的作用域锁类型。flyweight 使用给定的锁策略来同步对其内部 工厂的访问。

如果类型 Locking 满足以下条件,则它是一个锁策略:

头文件 "boost/flyweight/locking_tag.hpp" 概要

namespace boost{

namespace flyweights{

struct locking_marker;

template<typename T>
struct is_locking

template<typename T>
struct locking;

} // namespace boost::flyweights

} // namespace boost

类模板 is_locking

除非用户专门化,否则如果 T 派生自 locking_marker,则 is_locking<T>::typeboost::mpl::true_,否则为 boost::mpl::false_

类模板 locking

locking<T> 是一种语法结构,用于指示 T 是一种锁策略,而无需借助 is_locking 类模板提供的机制。

头文件 "boost/flyweight/simple_locking_fwd.hpp" 概要

namespace boost{

namespace flyweights{

struct simple_locking;

} // namespace boost::flyweights

} // namespace boost

simple_locking_fwd.hpp 前向声明了类 simple_locking

头文件 "boost/flyweight/simple_locking.hpp" 概要

simple_locking

锁策略,它指定基于环境提供的最简单的同步机制的基本互斥量类型;当没有可用的线程功能时,simple_locking 指定一个没有实际同步功能的虚拟类型。

头文件 "boost/flyweight/no_locking_fwd.hpp" 概要

namespace boost{

namespace flyweights{

struct no_locking;

} // namespace boost::flyweights

} // namespace boost

no_locking_fwd.hpp 前向声明了类 no_locking

头文件 "boost/flyweight/no_locking.hpp" 概要

no_locking

空的 锁策略:它指定一个满足 Mutex 概念的形式要求的虚拟类型,但不执行线程阻塞。no_locking 仅应在单线程环境中使用。




修订于 2010 年 3 月 9 日

© 版权所有 2006-2010 Joaquín M López Muñoz。根据 Boost 软件许可版本 1.0 发布。(请参阅随附的文件 LICENSE_1_0.txt 或复制在 https://boost.ac.cn/LICENSE_1_0.txt