【问题标题】:Why shared_timed_mutex is defined in c++14, but shared_mutex in c++17?为什么在c++14中定义了shared_timed_mutex,而在c++17中定义了shared_mutex?
【发布时间】:2017-03-05 13:36:20
【问题描述】:

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 更糟(更慢,消耗更多资源)吗?

【问题讨论】:

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


    【解决方案1】:

    Shared mutex 原来是有计时的,叫shared_mutex

    一位实施者 (msvc iirc) 指出,他们可以在没有时间的情况下“更便宜”地实施它。特别是,SRWLOCK 是 Windows 上现有的原语,足以实现共享互斥锁,但定时需要额外的机器。 (通过@t.c.)。 (但是,我相信它不仅更容易因为已经编写好了,而且从根本上来说更昂贵,至少在 x86/64 窗口上)

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

    于是改名为shared_timed_mutex,下个标准中加入了不定时的版本。

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

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

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

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

    【讨论】:

    • @MartinBonner 不,CRITICAL_SECTION 不是共享互斥锁(又名读/写锁)。 SRWLOCK 是原语。
    • 天啊!我对“共享”和“递归”感到困惑!
    猜你喜欢
    • 2019-07-03
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多