Uso de 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

Pregunta> Tengo problemas para entender las siguientes líneas:

  if (!lock.owns_lock()) 
     lock.timed_lock(boost::get_system_time() + 
                     boost::posix_time::seconds(1));//<<<<

Aquí está mi entendimiento. Asumirlock.owns_lock() devuelve false, lo que significa que el objeto actual NO posee el bloqueo en el objeto bloqueable. Así se ejecutará la siguiente línea. Si después de transcurrido el tiempo especificado y el objeto aún no puede obtener el bloqueo, entonces elboost::timed_lock devolverá falso. Así se ejecutará la siguiente línea ???

std::cout << "Thread " << boost::this_thread::get_id() << ": " << i << std::endl; 

¿Es correcta esta idea? Creo que el propósito del código es asegurarse de que la línea anterior se ejecute si el objeto tiene el bloqueo. Pero según mi entendimiento (supongo que NO es correcto), ¡la línea anterior siempre se ejecuta!

¿Dónde está el problema?

Respuestas a la pregunta(2)

Su respuesta a la pregunta