Si quiero agarrar múltiples cerraduras sin correr el riesgo de estancamiento, puedo usar la función std::lock
:¿Por qué no hay soporte de tiempo de espera en std :: lock?
int data1, data2;
std::mutex m1, m2;
std::unique_lock<std::mutex> lock1(m1, std::defer_lock);
std::unique_lock<std::mutex> lock2(m2, std::defer_lock);
std::lock(lock1, lock2); // guaranteed deadlock-free
// work with data1 and data2
Pero lo que si quiero adquirir las cerraduras en un plazo determinado de tiempo de espera y de lo contrario? ¿Hay alguna razón por la cual no hay nada como try_until
para cerraduras que es similar a wait_until
para futuros y variables de condición?
'std :: lock' no es un tipo, [es una función] (http://en.cppreference.com/w/cpp/thread/lock). :) – Xeo
@ Xeo: Correcto, gracias, gracias. Editado – KnowItAllWannabe
@Nicol: ¿Qué hay de malo en pasar bloqueos diferidos? 'std :: lock' acepta cualquier tipo de bloqueo y no tendrás que preocuparte por desbloquearlo más adelante. – Xeo