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
更差(更慢,消耗更多资源)?
答案 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更高效。