Verwendung von 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();
}
}
Frage> Ich habe Probleme, die folgenden Zeilen zu verstehen:
if (!lock.owns_lock())
lock.timed_lock(boost::get_system_time() +
boost::posix_time::seconds(1));//<<<<
Hier ist mein Verständnis. Annehmenlock.owns_lock()
Gibt false zurück, was bedeutet, dass das aktuelle Objekt NICHT Eigentümer der Sperre für das sperrbare Objekt ist. Also wird die nächste Zeile ausgeführt. Wenn nach Ablauf der angegebenen Zeit das Objekt die Sperre immer noch nicht erhalten kann, wird dieboost::timed_lock
wird false zurückgeben. Also wird die folgende Zeile ausgeführt ???
std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl;
Ist diese Idee richtig? Ich denke, der Zweck des Codes ist es, sicherzustellen, dass die obige Zeile ausgeführt wird, wenn das Objekt die Sperre hat. Aber nach meinem Verständnis (ich denke, es ist NICHT korrekt) wird die obige Zeile immer ausgeführt!
Wo ist das Problem?