我正在使用 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 行和第 3 行替换为 boost::lock_guard<boost::mutex> lock(map_mutex);
在第 1 行,一切正常,pthread 实现可能出了什么问题?
2) 我是否通过切换到提升来放弃性能。这里的关键部分对时间非常敏感,所以我希望互斥体非常轻量级。 (C++, 红帽)
最佳答案
如果在第 1 行和第 3 行之间抛出异常或函数返回,则不会解锁互斥锁。下次有人试图锁定它时,他们的线程将无限期地等待。
在 Posix 平台上,
boost::mutex
是围绕pthread_mutex_t
的一个非常薄的包装器,而lock_guard
只包含一个对互斥量的引用,并在其析构函数中将其解锁。唯一的额外开销是初始化该引用(甚至可能会被优化掉),以及在发生异常/返回时解锁互斥量所需的额外代码,这是您无论如何都需要的。
关于c++ - Boost::mutex 性能对比 pthread_mutex_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055602/