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

pek*_*u33 22 c++ std c++14 c++17

C++ 11介绍std::mutex及其扩展版本 - std::timed_mutex.

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

对此有任何合理的解释吗?

如果我不打算使用"定时"功能std::shared_timed_mutex,它会比提议更糟糕(更慢,消耗更多资源)std::shared_mutex吗?

Yak*_*ont 23

共享互斥锁最初有定时,并被调用shared_mutex.

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

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

所以它被重命名为shared_timed_mutex,并且在下一个标准中添加了不定时版本.

这里至少有一篇涉及重命名的论文.

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

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

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

  • @MartinBonner不,`CRITICAL_SECTION`不是共享的互斥锁(又名读/写锁).`SRWLOCK`是原始的. (4认同)