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

时间:2012-05-25 14:47:33

标签: c++ boost

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

但是如果你看看源代码,你会发现它们基本上是一回事。唯一的区别是锁定typedef。您可以在timed_lock上致电boost::mutex或暂时使用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::mutex作为TimedLockable是错误的吗?毕竟它没有文件记录。

1 个答案:

答案 0 :(得分:3)

我没有查看源代码,但几天前我使用过它们,定时的互斥锁功能不同。它们会阻塞,直到时间结束,然后返回。一个独特的锁将阻塞,直到它可以获得锁定。

尝试锁定不会阻止,然后您可以测试它是否拥有锁定的所有权。定时锁将在指定的时间内阻塞,然后表现为尝试锁定 - 即停止阻塞,并且您可以测试锁的所有权。

我相信内部的一些不同的升级锁是独特锁的typedef,因为它们都使用独特的锁定。 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,但我更新了它)