【发布时间】:2014-08-06 03:39:14
【问题描述】:
我想知道两者有什么区别:
boost::timed_mutex _mutex;
if(_mutex.timed_lock(boost::get_system_time() + boost::posix_time::milliseconds(10))){
exclusive code
_mutex.unlock();
}
和
boost::timed_mutex _mutex;
boost::timed_mutex::scoped_lock scoped_lock(_mutex, boost::get_system_time() + boost::posix_time::milliseconds(10));
if(scoped_lock.owns_lock()) {
exclusive code
}
我已经知道 scoped_lock 使解锁调用变得不必要。我的问题是指:
- 为什么在第一种情况下我们将 timed_lock 称为 互斥体,在第二个中,我们从互斥体和一个 期间。
- 哪一种效率更高?
- boost::posix_time 的用法还可以,或者建议使用其他的, 例如计时或持续时间?
- 有更好的方法(更快)尝试 比上面指定的两种方法获取“x”时间的锁?
【问题讨论】:
-
在我看来,scoped_lock 用于 timed_mutex,就像 shared_ptr 用于原始指针一样:一旦超出范围,它将解锁互斥锁。虽然它可能比简单的 timed_mutex 有更多的开销(它增加了一个额外的管理层,虽然可能非常薄),但也有一些好处。就像您的专有代码中有异常一样,互斥锁将解锁。仅使用 timed_mutex 不会发生这种情况。
-
不错的答案,但它几乎不能回答我四个问题中的一个,因为我已经说过我知道不必要的解锁,所以如果它正在处理解锁,肯定会有更多的开销。我并不是要刻薄,但这个答案并没有为我解决问题。无论如何谢谢:)
标签: c++ boost locking boost-thread boost-mutex