gpt4 book ai didi

c++ - boost::mutex 和 boost::timed_mutex 的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:41 26 4
gpt4 key购买 nike

根据 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::mutex 用作 TimedLockable 是错误的吗?毕竟它没有记录。

最佳答案

我没有看过源代码,但我几天前用过这些,定时互斥体的功能不同。他们阻塞直到时间到了,然后返回。唯一锁会阻塞,直到它能拿到锁。

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

我相信在内部一些不同的 boost 锁是唯一锁的类型定义,因为它们都使用唯一锁。 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 但我更新了它)

关于c++ - boost::mutex 和 boost::timed_mutex 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10756539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com