首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::mutex和boost::timed_mutex的区别

boost::mutex和boost::timed_mutex的区别
EN

Stack Overflow用户
提问于 2012-05-25 22:47:33
回答 1查看 4.8K关注 0票数 4

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

但是如果你看一下源代码,你会发现它们基本上是一样的。唯一的区别是锁类型定义。您可以在boost::mutex上调用timed_lock,或者使用带有超时的boost::unique_lock

代码语言:javascript
复制
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是错误的吗?毕竟这是没有文档记录的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-25 22:55:42

我还没有看过源代码,但我几天前就用过了,定时互斥锁的功能不同。它们会阻塞,直到时间到了,然后返回。一个唯一的锁将被阻塞,直到它可以获得锁为止。

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

我相信在内部,一些不同的boost锁是唯一锁的typedefs,因为它们都使用唯一锁。虽然您可能会使用不同的功能并混淆您的客户端代码,但您仍然可以跟踪您使用不同类型的名称来做什么。

编辑:下面是一个定时锁的例子:

代码语言:javascript
复制
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,但我更新了它)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10756539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档