【问题标题】:What is the correct term for an object or reference/pointer with an associated lock?具有关联锁的对象或引用/指针的正确术语是什么?
【发布时间】:2020-03-02 09:44:08
【问题描述】:

类似于 伪代码:

template<class T, class M>
struct X {
  std::unique_lock<M> associated_lock_;
  T* associated_obj_;
};

用例:

{
  X x = getObj();//locking occurs
  //do something with x.associated_obj_
}//x gets unlocked due to scope exit

我在想“结帐”或“访问”行中的一些东西,如果这样可以传达含义。 “检查点”可能很糟糕。 “ConcurrentY”或“ConcurrentObject”通常是一个公认的命名,例如。一个 ConcurrentMap 类,但在这种情况下这似乎是错误的,因为这不是像这里那样暴露锁定机制本身的东西。

【问题讨论】:

  • 顺便说一句,当开发人员忘记按所示方式限定getObj 返回的值时,您使用的习惯用法通常会导致代码非常脆弱。随后对getObj 的调用可能会导致各种问题,包括UB(例如,如果模板参数Mstd::mutex)。

标签: c++ concurrency c++17


【解决方案1】:

具有关联锁的对象或引用/指针的正确术语是什么?

如果没有锁定方法(private 带有锁定访问器)就无法访问对象,那么我们说它是线程安全的

如果包装器在创建时获取资源并在销毁时负责释放(例如std::lock_guard 会这样做),我们说它是RAII(资源获取是初始化)。

但是这些术语适用于限定包装器(在您的示例中为X),而不是内部对象(所以我不确定这个答案是否真的是您正在寻找的)。


编辑:通过查看您的用例,似乎正确的术语是 RAII,因为锁绑定到对象的生命周期(这正是 RAII 的含义)。

【讨论】:

  • 我在想“结帐”或“访问”行中的某些内容,如果这样可以传达含义。 “检查点”可能很糟糕。 “ConcurrentY”或“ConcurrentObject”通常是一个公认的命名,例如。一个 ConcurrentMap 类,但在这种情况下这似乎是错误的,因为这不是锁定机制本身没有像这样公开的东西。
  • @darune 如果所有实例都使用相同的互斥锁,我认为您要构建的是“定时单例”,一次只能存在一个实例。
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 2016-04-17
  • 1970-01-01
  • 2011-06-23
  • 2011-10-14
  • 1970-01-01
  • 2013-05-16
  • 2013-03-09
相关资源
最近更新 更多