我之前使用了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行和第3行之间抛出异常,或者函数返回,那么互斥锁将不会解锁。下次有人试图锁定它时,他们的线程将无限期等待。
-
在Posix平台上,
boost::mutex
是pthread_mutex_t
的一个非常薄的包装器,而lock_guard
只包含对互斥对象的引用,并在其析构函数中对其进行解锁。唯一的额外开销是初始化该引用(甚至可能会被优化掉),以及在发生异常/返回时解锁互斥所需的额外代码,这是您无论如何都需要的。