Boost C++ 库

...世界上最受推崇和设计最精湛的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

Boost.Flyweight 锁定策略参考



目录

初步概念

互斥锁 是一种类型,其对象可以处于两种状态之一,称为锁定和未锁定。其属性是,当线程 A 锁定了互斥锁 m,而不同的线程 B 尝试锁定 m 时,B 将被阻塞,直到 A 解锁 m。此外,如果一个线程可以成功调用已由同一线程锁定的互斥锁的锁定操作,则称互斥锁支持递归锁定;在这种情况下,要求线程执行与其对互斥锁执行的锁定操作一样多的解锁操作,才能使互斥锁有效地解锁。作用域锁 是一种与某些互斥锁类型关联的类型,其对象在构造/析构时执行互斥锁的锁定/解锁。

在下表中,Mutex 是互斥锁类型,mMutex 类型的对象,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

Null 锁定策略:它指定了一种虚拟类型,该类型满足 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 复制)