Boost :: mutex性能vs pthread_mutex_t

时间:2012-08-21 13:11:22

标签: 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_t切换为boost:mutex

1)如果我只是在第1行用boost::lock_guard<boost::mutex> lock(map_mutex);替换第1行和第3行,并且所有内容都能正常运行,那么pthread实现会出现什么问题?

2)我是否通过切换到提升来放弃表现。这里的关键部分是非常时间敏感的,所以我希望互斥体非常轻巧。 (C ++,redhat)

1 个答案:

答案 0 :(得分:5)

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

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