根据Boost文档,boost::mutex和boost::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::mutex用作TimedLockable是错误的吗?毕竟这是没有文档记录的。
发布于 2012-05-25 22:55:42
我还没有看过源代码,但我几天前就用过了,定时互斥锁的功能不同。它们会阻塞,直到时间到了,然后返回。一个唯一的锁将被阻塞,直到它可以获得锁为止。
try锁不会阻塞,然后您可以测试它是否拥有锁的所有权。定时锁将阻塞指定的时间量,然后表现为try锁-即停止阻塞,您可以测试锁的所有权。
我相信在内部,一些不同的boost锁是唯一锁的typedefs,因为它们都使用唯一锁。虽然您可能会使用不同的功能并混淆您的客户端代码,但您仍然可以跟踪您使用不同类型的名称来做什么。
编辑:下面是一个定时锁的例子:
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,但我更新了它)
https://stackoverflow.com/questions/10756539
复制相似问题