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