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;
这个想法正确吗?我认为代码的目的是确保在对象有锁的情况下执行上述行。但根据我的理解(我猜是不正确的),上面的行总是会运行!
问题出在哪里?