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