【发布时间】:2011-02-14 15:58:18
【问题描述】:
C++0x 允许在达到给定时间之前锁定互斥体,并返回一个布尔值,说明互斥体是否已被锁定。
template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock,
Duration>& abs_time);
在某些情况下,我考虑了一种异常情况,即锁定由于超时而失败。在这种情况下,应该更适合例外。
为了有所作为,函数 lock_until 可用于在达到锁定前的时间时获取超时异常。
template <class Clock, class Duration>
void lock_until(const chrono::time_point<Clock,
Duration>& abs_time);
您认为 lock_until 在某些情况下应该更合适吗?如果是,在哪些方面?如果不是,为什么 try_lock_until 总是更好的选择?
【问题讨论】:
-
这个问题中是否有特定于 try_lock_until 的内容?一种情况是否“异常”,取决于(a)被调用者是否可以返回有意义的值,以及(b)调用者是否可以继续。我们无法评论 (b),因此我们无法告诉您抛出异常是否是对
try_lock_until返回 false 的明智回应。任何调用者都可以通过抛出异常来响应任何返回错误值的函数。除了内存不足和无法返回值的情况(例如,动态转换为引用失败)之外,C++ 标准库不会抛出太多问题。 -
@Steve 我认为您的评论可能是不需要 lock_until 的原因。你能补充一个答案吗?我的问题是当 try_lock_until 返回 false 时是否会抛出超时异常。如果是,在哪些情况下?
标签: c++ boost synchronization c++11 timeoutexception