为什么shared_timed_mutex在c ++ 14中定义,而shared_mutex在c ++ 17中定义?

时间:2016-10-23 19:52:41

标签: c++ c++14 std c++17

C ++ 11引入了std::mutex及其扩展版本 - std::timed_mutex

但是,在c ++ 14中我们有std::shared_timed_mutex,但是它的父母',std::shared_mutex将在c ++ 17中添加。

对此有合理的解释吗?

如果我不打算使用' timed' std::shared_timed_mutex的功能是否会比提议的std::shared_mutex更差(更慢,消耗更多资源)?

1 个答案:

答案 0 :(得分:23)

共享互斥锁最初有定时,称为shared_mutex

一个实现者(msvc iirc)指出他们可以在没有时间的情况下“更便宜”地实现它。特别是,SRWLOCK是Windows上的现有原语,足以实现共享互斥锁,但是timed需要额外的机制。 (Via @ t.c。)。 (但是,我认为它不仅仅是更容易,因为已经编写,但也从根本上更昂贵,至少在x86 / 64窗口上)

为标准添加新类型为时已晚,但重新命名也不算太晚。

因此它被重命名为shared_timed_mutex,并在下一个标准中添加了不定时版本。

Here至少是重命名所涉及的一篇论文。

  

我们建议将shared_mutex重命名为shared_timed_mutex:

     

(a)与其他互斥体保持一致(修复命名不一致);

     

(b)为shared_mutex留出空间,在某些平台上比shared_timed_mutex更高效。