【发布时间】:2013-01-07 16:47:47
【问题描述】:
void wait(int seconds)
{
boost::this_thread::sleep(boost::posix_time::seconds(seconds));
}
boost::timed_mutex mutex;
void thread()
{
for (int i = 0; i < 5; ++i)
{
wait(1);
boost::unique_lock<boost::timed_mutex> lock(mutex, boost::try_to_lock);
if (!lock.owns_lock())
lock.timed_lock(boost::get_system_time() + boost::posix_time::seconds(1));//<<<<
std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
boost::timed_mutex *m = lock.release();
m->unlock();
}
}
问题>我无法理解以下几行:
if (!lock.owns_lock())
lock.timed_lock(boost::get_system_time() +
boost::posix_time::seconds(1));//<<<<
这是我的理解。假设 lock.owns_lock() 返回 false,这意味着当前对象不拥有可锁定对象上的锁。所以下一行将被执行。如果在指定的时间过去后,对象仍然无法获得锁,那么boost::timed_lock 将返回 false。所以下面一行会被执行???
std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
这个想法正确吗?我认为代码的目的是确保在对象有锁的情况下执行上述行。但是根据我的理解(我猜是不正确的),上面的行总是会运行!
问题出在哪里?
【问题讨论】: