c++ - `unique_lock`、`scoped_lock` 和 `lock_guard` 中指定的 mutex_type 的用例是什么?
问题描述
用于保护的 c++11 互斥体 RAII 类型std::mutex
都有一个 typedef:
typedef Mutex mutex_type;
这个成员 typedef 的意义何在?起初我认为它可以用来概括创建一个用于移动锁的对象(在 的情况下unique_lock
)例如:
template<SomeLock>
void function(SomeLock in)
SomeLock::mutex_type newMutex;
//Do something
但我无法想象它的用途。
进一步注意的是,它似乎没有在任何地方的实现中使用locks
(至少在 VisualC++ 中没有)。
会员的用例是mutex_type
什么?
解决方案
在标准库中,每个模板参数都有一个类型别名是正常的。std
顺便说一句,我不记得没有将所有模板参数别名为成员类型的模板
在一组相关类中为类型别名使用不同的名称,可以轻松将该组与其他类区分开来,例如 SFINAE
template<typename Lock, typename = std::void_t<Lock::mutex_type>>
void usesLock(Lock lock); // Substitution failure for most instantiations of Lock
它还允许您轻松指定适当类型的参数。
template<typename Lock>
void usesMutex(Lock::mutex_type & mut);
推荐阅读
- vim - E492:UltiSnips 不是编辑器命令
- php - 我无法弄清楚 PHP 中的 if 语句有什么问题?
- reactjs - 更改第 3 方反应组件属性的数据类型?
- error-handling - 使用 gqlgen + go gin 自定义错误状态代码
- flutter - Flutter - 是否可以选择在我的 Flutter 移动应用中获取网站文本?
- python - OpenCV calcOpticalFlowFarneback:如何从特定像素中提取速度向量值
- python - DOcplexException:期望线性约束,得到:docplex.mp.LogicalOrExpr
- apache-kafka - Kafka Mirror Maker 2 偏移复制不工作
- r - R Shiny Datatable - 编辑值、影响其他列并保留分页
- python-3.x - 使用函数将单个元素值传递给列表