在我们的应用程序中,我们处理在工作线程中处理并在显示线程中访问的数据,并且我们有一个互斥体负责处理关键部分。没什么特别的。保护数据设计模式
现在我们考虑重新处理我们的代码,当前锁定由持有和处理数据的方明确地完成。我们想到了一个拥有数据的实体,只能以保护的方式访问数据。
为此,我们有一个名为GuardedData的类。调用者可以请求这样一个对象,并且应该在本地范围内只保留一小段时间。只要对象存在,它就会保持锁定状态。一旦对象被销毁,锁就会被释放。数据访问与锁定机制相结合,无需在调用者中进行任何明确的额外工作。班级的名字提醒现在的警卫的来电者。
template<typename T, typename Lockable>
class GuardedData {
GuardedData(T &d, Lockable &m) : data(d), guard(m) {}
boost::lock_guard<Lockable> guard;
T &data;
T &operator->() { return data; }
};
再次,一个非常简单的概念。运算符 - >模仿STL迭代器的语义以访问有效负载。
现在我不知道:
- 是这种方法众所周知的?
- 是否有像这样的模板类已经可用,例如:在boost库中?
我在问,因为我认为这是一个相当通用和可用的概念。虽然我找不到像这样的东西。
我有数据可以在后台访问时在前台进行更改。有效地,当背景计算完成时,数据被交换。当有人访问数据时,这种交换不应该发生,这可能导致该方进入不一致的状态。我们需要做交换而不是创建一个新的实例,而其他人仍然使用旧的实例。原因是同时驻留在内存中的大量数据。 – ypnos 2013-03-21 13:59:12