boost::mutex 和 boost::timed_mutex 之间的区别

Difference between boost::mutex and boost::timed_mutex

本文关键字:boost mutex 之间 区别 timed      更新时间:2023-10-16

根据Boost文档boost::mutexboost::timed_mutex应该是不同的。第一个实现Lockable Concept,第二个实现TimedLockable Concept

但是如果你看一下来源,你会发现它们基本上是一回事。唯一的区别是锁类型定义。您可以在boost::mutex上调用timed_lock,也可以使用超时boost::unique_lock就可以了。

typedef ::boost::detail::basic_timed_mutex underlying_mutex;
class mutex:
    public ::boost::detail::underlying_mutex
class timed_mutex:
    public ::boost::detail::basic_timed_mutex

这背后的理由是什么?是不是过去的残余,用boost::mutexTimedLockable有错吗?毕竟是没有记录的。

我没有

看过源代码,但我几天前使用了这些,定时互斥体的功能不同。他们阻止直到时间结束,然后返回。唯一的锁将阻塞,直到它可以获得锁。

try 锁不会阻止,然后您可以测试它是否具有锁的所有权。定时锁将阻塞指定的时间量,然后表现为 try 锁 - 即停止阻塞,您可以测试锁的所有权。

我相信在内部,一些不同的提升锁是独特锁的类型定义,因为它们都使用独特的锁定。typedef 名称在那里,以便您可以跟踪使用不同名称的目的,即使您可能使用不同的功能并混淆客户端代码。

编辑:这是定时锁的示例:

boost::timed_mutex timedMutexObj;
boost::mutex::scoped_lock scopedLockObj(timedMutexObj, boost::get_system_time() + boost::posix_time::seconds(60));
if(scopedLockObj.owns_lock()) {
    // proceed
}

供参考:http://www.boost.org/doc/libs/1_49_0/doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.timed_lockable.timed_lock

再次编辑:为了为您的问题提供具体答案,是的,使用 boost::mutex 作为TimedLockable是错误的,因为为此目的提供了boost::timed_mutex。如果它们在源中是相同的,并且没有记录,这是不可靠的行为,您应该遵循文档。(我的代码示例起初没有使用timed_mutex,但我更新了它)