2

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 总是更好的选择?

4

1 回答 1

2

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

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

此外,快速浏览 FCD 中的线程和异常库不会显示任何与时间相关的异常类,因此自然不会抛出任何类型的std::for 。lock_until

于 2010-05-02T06:05:44.367 回答