boost::mutex 和 boost::timed_mutex 之间的区别
Difference between boost::mutex and boost::timed_mutex
根据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
有错吗?毕竟是没有记录的。
看过源代码,但我几天前使用了这些,定时互斥体的功能不同。他们阻止直到时间结束,然后返回。唯一的锁将阻塞,直到它可以获得锁。
try 锁不会阻止,然后您可以测试它是否具有锁的所有权。定时锁将阻塞指定的时间量,然后表现为 try 锁 - 即停止阻塞,您可以测试锁的所有权。
我相信在内部,一些不同的提升锁是独特锁的类型定义,因为它们都使用独特的锁定。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
,但我更新了它)
- BOOST :: MUTEX版本与调试构建
- 使用Boost ::与包含Boost :: Mutex的类绑定
- boost::interprocess_mutex与进程本地boost::mutex
- Boost Mutex implementation for Windows
- 为什么我必须有一个 boost::mutex for boost::condition_variable
- boost::mutex和boost::timed_mutex的性能差异
- 如何使用boost::mutex作为std::map中的映射类型
- boost::mutex::timed_lock not on Linux
- 与 boost::interprocess_mutex 相比,为什么不在共享内存中使用 boost::mutex
- boost::mutex 无法帮助避免C++程序中的竞争条件
- 为什么 boost::mutex 比 std::mutex 快 vs2013.
- boost::mutex 在 Visual Studio 中支持 try_lock_for,但在 Xcode 中不支持
- boost::mutex 和 boost::timed_mutex 之间的区别
- Boost,指向互斥对象的指针,能起作用吗?boost::mutex和std::vector,不可复制的问题
- 在boost::mutex构造函数中同时写入同一内存区域可能存在错误
- 使用boost::mutex作为类的私有成员
- 可变boost::mutex可以分离锁和等待函数
- Boost::mutex, pthread_mutex_destroy失败的调试建议
- Boost::mutex - 是否可以将其锁定在一个类函数中并在另一个类函数上解锁
- replacing boost:: mutex