C++ 为什么定时锁没有';t在C++;0x?

C++ 为什么定时锁没有';t在C++;0x?,c++,boost,synchronization,c++11,timeoutexception,C++,Boost,Synchronization,C++11,Timeoutexception,C++0x允许锁定互斥体直到达到给定时间,并返回一个布尔值,说明互斥体是否已锁定 template <class Clock, class Duration> bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time); 模板 bool try_lock__________________________________; 在一些上下

C++0x允许锁定互斥体直到达到给定时间,并返回一个布尔值,说明互斥体是否已锁定

template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, 
                    Duration>& abs_time);
模板
bool try_lock__________________________________;

在一些上下文中,我考虑一个特殊的情况,即锁定由于超时而失败。在这种情况下,例外情况应该更合适

为了实现差异,可以使用函数lock_until在锁定之前达到超时异常

template <class Clock, class Duration>
void lock_until(const chrono::time_point<Clock, 
                Duration>& abs_time);
模板
无效锁定直到(常数计时:时间点和abs时间);

你认为lock_until在某些情况下更合适吗?如果是,在哪些方面?如果没有,为什么尝试锁定直到总是一个更好的选择?

您不能检查返回值并抛出自己的异常吗

if ( ! my_lock.try_lock_until( my_start_time ) ) {
    throw realtime_error( "Couldn't start in time!" );
}

此外,快速浏览FCD中的线程和异常库不会显示任何与时间相关的异常类,因此在
std::
中没有键入要自然抛出的
lock\u直到。

这个问题中有什么特别的内容需要尝试锁定吗?根据(A)被叫方是否可以返回有意义的值,以及(b)被叫方是否可以继续,情况是否“异常”。我们无法对(b)进行评论,因此我们无法告诉您引发异常是否是对
try\u lock\u的合理响应,直到
返回false。任何调用方都可以通过抛出异常来响应返回假值的任何函数。除了内存不足和没有返回值的情况(例如失败的动态引用),C++标准库不会抛出很多东西。“史提夫,我认为你的评论可能是不需要洛克的原因。你能补充一个答案吗?我的问题是,在尝试锁定时是否引发超时异常,直到返回false。如果是,在哪些情况下?@我看你已经听从了我给史蒂夫的建议。你应该让史蒂夫自己来做。@Vic如果你是这个意思的话,我没有从评论中复制这个想法。如果你感觉好一点,我可以做这个CW。@Potatowatter好吧,我接受你也可以有同样的想法。我同意标准提供的界面是最小的,允许用户做任何她想做的事情。这是很正常的,因为这是我问题的一部分。问题是您更喜欢您编写的代码还是引发常见异常的特定函数。@Vicente:就个人而言,我会在定义新的异常类时定义函数以生成异常,假设有几个这样的截止日期会错过。我不喜欢复制粘贴代码。但是只在一个地方调用过多的函数也是不好的。+1我终于接受了你的答案,因为用户总是可以轻松地实现它。但是,我真的认为,添加基于异常的定时锁为许多更友好的特性打开了窗口。