【问题标题】:What are the advantages of other mutex wrapper libraries over std::mutex?与 std::mutex 相比,其他互斥体包装库的优势是什么?
【发布时间】:2012-08-21 07:06:44
【问题描述】:

C++ 标准库提供std::mutex (lock, unlock, try_lock) 功能,可以在多线程环境中工作。

我还听说过有关包装库(例如Boost::mutex)的讨论,据我所知,它们提供相同的功能(lock, unlock, try_lock)。

我的问题是,使用此类包装库与标准包装库相比有什么优势?

【问题讨论】:

  • 从历史上看,在 C++11 之前的 C++ 中没有真正的多线程(尽管许多编译器和库都提供了它)。 Boost 是一个试验场,mutex 的 boost 实现与unordered_map 一样,是标准中集成的基础。所以你可以说std::mutexboost::mutex 的改进。

标签: c++ multithreading locking mutex standard-library


【解决方案1】:

std::mutexstd::thread 和线程库的其他元素仅在 C++11 中可用。 boost::mutex 等早于 C++11。所以好处是,如果你没有 C++11 支持,你可以使用它们。

【讨论】:

  • pthread 库中的 pthread_mutex_unlock/lock 是否提供与 std::mutex 类似的功能?又有什么区别?
  • @Kam std 的东西是标准的,因此是可移植的。 boost 的东西对于许多平台都是可移植的。 Pthreads 我们通常仅在 *nix pr POSIX 平台上可用
【解决方案2】:

虽然 juanchopanza 指出了对问题的最直接答案 (+1),但 std::mutex介绍它们包装的类型的一件事是使用异常。对于大多数人/环境/需求来说,这将被认为是一件好事。在某些情况下,您可能不需要异常依赖。在那种情况/环境下,std::mutex 接口可能不是一个选项或不可取的。

【讨论】:

    【解决方案3】:

    一些包装器,如 TBB 和 PPL,提供的功能远远超过标准库。

    1. 自己使用 pthreads/CreateThread = 编写自己的 malloc
    2. 使用std::thread = malloc/free
    3. 使用 TBB/PPL = std::vector/std::unique_ptr

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 2013-07-03
      • 2010-09-09
      • 2011-06-08
      • 2016-07-03
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多