"boost/flyweight/locking_tag.hpp"
概要
"boost/flyweight/simple_locking_fwd.hpp"
概要
"boost/flyweight/simple_locking.hpp"
概要
"boost/flyweight/no_locking_fwd.hpp"
概要
"boost/flyweight/no_locking.hpp"
概要
互斥量(mutex)是一种类型,其对象可以处于两种状态之一,称为锁定和未锁定。当线程 A 锁定互斥量 m
,而另一个线程 B 尝试锁定 m
时,B 会被阻塞,直到 A 解锁 m
。此外,如果线程可以成功调用已被同一线程锁定的互斥量的锁定操作,则称互斥量支持递归锁定。在这种情况下,线程必须执行与对互斥量执行的锁定操作一样多的解锁操作,才能使互斥量真正解锁。作用域锁(scoped lock)是一种与某种互斥量类型关联的类型,其对象在构造/析构时执行互斥量的锁定/解锁操作。
在下表中,Mutex
是一种互斥量类型,m
是类型为 Mutex
的对象,Lock
是与 Mutex
关联的作用域锁,而 lk
是 Lock
的一个值。
表达式 | 返回类型 | 断言/注释 前置/后置条件 |
---|---|---|
Mutex m; |
后置条件:m 已解锁。 |
|
(&m)->~Mutex(); |
void |
前置条件:m 已解锁。 |
Lock lk(m); |
将 m 与 lk 关联并锁定 m 。 |
|
(&lk)->~Lock(); |
void |
解锁与 lk 关联的互斥量。 |
这些概念非常相似,但与 Boost 线程库 中描述的同名概念并不完全等价。
锁策略描述了互斥量类型和关联的作用域锁类型。flyweight
使用给定的锁策略来同步对其内部 工厂的访问。
如果类型 Locking
满足以下条件,则它是一个锁策略:
is_locking<Locking>::type
是 boost::mpl::true_
,Locking
的形式是 locking<Locking'>
。Locking::mutex_type
(如果应用 (b),则为 Locking'::mutex_type
)是 Mutex
的模型,并支持递归锁定。Locking::lock_type
(如果应用 (b),则为 Locking'::lock_type
)是上述互斥量的 Scoped Lock
。"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>::type
为 boost::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)