提升::互斥体性能与pthread_mutex_t



我之前使用了pthread_mutex_t s。代码有时会被卡住。我有几行代码分散在我包装的函数中。。。

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) 我是不是因为换成了boost而放弃了表现。这里的关键部分对时间非常敏感,所以我希望互斥对象非常轻量级。(C++,redhat)

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

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

最新更新