- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
根据 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
是错误的吗?毕竟它没有记录。
最佳答案
我没有看过源代码,但我几天前用过这些,定时互斥体的功能不同。他们阻塞直到时间到了,然后返回。唯一锁会阻塞,直到它能拿到锁。
尝试锁不会阻塞,然后您可以测试它是否拥有锁的所有权。定时锁将阻塞指定的时间量,然后表现为尝试锁 - 即停止阻塞,您可以测试锁的所有权。
我相信在内部一些不同的 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
}
再次编辑:为您的问题提供具体答案,是的,将 boost::mutex
用作 TimedLockable
是错误的,因为 boost: :timed_mutex
就是为此目的而提供的。如果它们在源代码中是相同的并且没有记录,则这是不可靠的行为,您应该遵循文档。 (我的代码示例一开始没有使用 timed_mutex
但我更新了它)
关于c++ - boost::mutex 和 boost::timed_mutex 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10756539/
我的文件 test8.cpp是 #include #include #include std::mutex mutex; std::timed_mutex timed_mutex; 当我编译这段代码时
我第一次使用 timed_mutex。到目前为止,它对我来说只是 lock_guard。 但似乎只有第一个try_lock_for真正成功了。除了第一个 try_lock_for 之外的所有内容都返回
在哪些情况下会出现 std::timed_mutex优于常规互斥体? 我能想到的唯一用例是(IMO hackish)防止死锁的方法。 在哪些其他情况下 std::timed_mutex 是一个不错的选
我有一个问题。我想为我的程序使用互斥体。所以会发生什么:我正在构造一个包含 std::timed_mutex 的对象。创建时,此对象会锁定互斥量,因为稍后应将其解锁。创建互斥锁的同一线程现在应该等待该
我第一次使用 std::timed_mutex,它的行为与我预期的不同。它似乎立即失败,而不是等待互斥锁。我以毫秒为单位提供锁定超时(如此处所示 http://www.cplusplus.com/re
try_lock* 是指 try_lock()、try_lock_for() 和 try_lock_until()。根据cppreference ,这三种方法都可能会虚假地失败。以下引用自 try_l
我正在尝试同时使用 timed_mutex 和 scoped_lock。我之前通过一些示例成功地使用了 scoped_lock,但现在我似乎找不到解决方法,我也无法正确理解 boost 文档。 期望的
我在 Ubuntu 12.04 中使用 gcc-4.8.1(configure: ./configure --prefix=/usr/local) 编译了以下代码,但是当我运行它时,它没有工作。它没有
根据 Boost 文档,boost::mutex 和 boost::timed_mutex 应该是不同的。第一个实现了 Lockable Concept,第二个实现了 TimedLockable Co
我需要通过互斥来保护资源。为了改进诊断,我正在考虑使用 timed_mutex 进行死锁警告(代码未测试): boost::timed_mutex m; // first thread accessi
这可能吗?我想使用 timed_mutex 而不是带有 condition_variable 的常规互斥锁,但它不会编译并查看源代码 void wait(unique_lock& __lock
我想知道这两者之间的区别是什么 boost::timed_mutex _mutex; if(_mutex.timed_lock(boost::get_system_time() + boost::po
我是一名优秀的程序员,十分优秀!