在`unique_lock`,`scoped_lock`和`lock_guard`中指定的mutex_type的用例是什么?

时间:2018-05-04 06:31:28

标签: c++ multithreading mutex

用于保护std::mutex的c ++ 11互斥锁RAII类型都具有typedef:

typedef Mutex mutex_type;

这个成员typedef有什么意义?起初我以为它可以用于概括创建一个移动锁的对象(例如unique_lock):

template<SomeLock>
void function(SomeLock in)
    SomeLock::mutex_type newMutex;
    //Do something

但我无法想象这个用途。

另一个注意事项是它似乎不会在locks的实现中使用(至少在VisualC ++中没有)。

会员mutex_type的用例是什么?

1 个答案:

答案 0 :(得分:1)

在标准库中,每个模板参数都具有类型别名是正常的。临时而言,我无法回忆起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);