【发布时间】: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(例如,如果模板参数M是std::mutex)。
标签: c++ concurrency c++17