boost::timed_lock用法的boost :: unique_lock的:: 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();
}
}
問題>我有問題要了解以下行:
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;
這個想法是否正確?我認爲代碼的目的是確保如果對象具有鎖定,則執行上面的行。但根據我的理解(我猜是不正確的),上面的行總是運行!
問題在哪裏?
我已經讀過那一行。我最初的理解是,這裏unique_lock的使用被過度殺死。儘管如此,我認爲代碼是不正確的,並且至少應該提供一個處理,如果仍然無法在一段時間後獲得鎖定,而不是直接將下一行代替。 – q0987