Verwendung von boost :: unique_lock :: timed_lock

boost :: 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

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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage