首页 > 解决方案 > `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什么?

标签: c++multithreadingmutex

解决方案


在标准库中,每个模板参数都有一个类型别名是正常的。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);

推荐阅读