提高:: timed_lock
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();
}
}
timed_lock
提问>我有问题要了解以下几行:
if (!lock.owns_lock())
lock.timed_lock(boost::get_system_time() +
boost::posix_time::seconds(1));//<<<<
这是我的理解。 假定lock.owns_lock()
返回假,这意味着当前的对象不拥有可锁定对象的锁。 因此,下一行会被执行。 如果在指定的时间和失效后的对象仍然无法获得锁,那么boost::timed_lock
将返回false。 所以下面的线将被执行???
std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
这种想法正确吗? 我想代码的目的是确保执行上述线路当且仅当对象具有锁。 但根据我的理解(我猜是不正确的),上面的线总是被运行!
问题出在哪儿?