c++ - Boost::mutex 性能对比 pthread_mutex_t

标签 c++ mutex boost-mutex

我正在使用 pthread_mutex_t事先。代码有时会卡住。我有几行代码分散在我包装的函数中......

pthread_mutex_lock(&map_mutex);// Line 1
  //critical code involving reading/writing wrapped around a mutex //Line 2
pthread_mutex_unlock(&map_mutex); //Line 3

不确定代码是如何/在哪里卡住的,我切换了 pthread_mutex_tboost:mutex

1) 如果我只是将第 1 行和第 3 行替换为 boost::lock_guard<boost::mutex> lock(map_mutex);在第 1 行,一切正常,pthread 实现可能出了什么问题?

2) 我是否通过切换到提升来放弃性能。这里的关键部分对时间非常敏感,所以我希望互斥体非常轻量级。 (C++, 红帽)

最佳答案

  1. 如果在第 1 行和第 3 行之间抛出异常或函数返回,则不会解锁互斥锁。下次有人试图锁定它时,他们的线程将无限期地等待。

  2. 在 Posix 平台上,boost::mutex 是围绕 pthread_mutex_t 的一个非常薄的包装器,而 lock_guard 只包含一个对互斥量的引用,并在其析构函数中将其解锁。唯一的额外开销是初始化该引用(甚至可能会被优化掉),以及在发生异常/返回时解锁互斥量所需的额外代码,这是您无论如何都需要的。

关于c++ - Boost::mutex 性能对比 pthread_mutex_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055602/

相关文章:

c++ - 如何将以下 "foreach"编写为 C++ 迭代器

c++11 - 使用 std::mutex 而不是 boost::mutex 时出现未处理的异常

c++ - C++如何限制运行实例数

c++ - 如何使用目录中的所有文件夹填充 C++ 中的列表框

c++ - 使用openssl BIO逐 block 解码base64

c++ - 快速连续的 notify_all()s 不会解锁 condition_variable?

multithreading - 用互斥锁同步线程

linux - 正确使用在进程间共享的 pthread mutex

c++ - 一个作家许多读者发行 map

c++ - “StringLinkedList”未在此范围内声明