Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::mutex和boost::timed_mutex之间的区别_C++_Boost - Fatal编程技术网

C++ boost::mutex和boost::timed_mutex之间的区别

C++ boost::mutex和boost::timed_mutex之间的区别,c++,boost,C++,Boost,根据Boost文档Boost::mutex和Boost::timed_mutex应该是不同的。第一个实现了可锁定概念,第二个实现了可锁定时间概念 但是如果你看一下来源,你会发现它们基本上是一样的。唯一的区别是lock-typedef。您可以在boost::mutex上调用timed_lock,或者在超时正常的情况下使用boost::unique_lock typedef ::boost::detail::basic_timed_mutex underlying_mutex; class mute

根据Boost文档
Boost::mutex
Boost::timed_mutex
应该是不同的。第一个实现了
可锁定概念
,第二个实现了
可锁定时间概念

但是如果你看一下来源,你会发现它们基本上是一样的。唯一的区别是lock-typedef。您可以在
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锁-即停止阻塞,您可以测试锁的所有权

我相信在内部,一些不同的boost锁都是针对unique lock的typedef,因为它们都使用unique锁。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\u mutex
,但我更新了它)

我发现我的答案被否决了。如果这不能回答问题,或者如果我错了,请解释如何实现。那么,如果相同的基础互斥在您的平台上实现了这两个概念,该怎么办。它们可以不同,但不是必需的@鲍普森:是的,我明白了,但这并不是说产生的额外功能隐藏在某个“细节”名称空间中。公开的方法是正确的。我发现它不是Boost库的特征。