Se voglio prendere più serrature senza correre il rischio di stallo, posso usare la funzione std::lock
:Perché nessun supporto di timeout in 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
Ma cosa succede se voglio acquistare le serrature entro un determinato periodo e il timeout altrimenti? C'è una ragione per cui non c'è nulla come try_until
per i blocchi che è simile a wait_until
per le variabili di condizione e di futuro?
'std :: lock' non è un tipo, [è una funzione] (http://en.cppreference.com/w/cpp/thread/lock). :) – Xeo
@Xeo: Giusto, grazie. Modificato. – KnowItAllWannabe
@Nicol: Cosa c'è che non va con il passaggio dei blocchi differiti? 'std :: lock' accetta qualsiasi tipo di blocco e non dovrai preoccuparti di sbloccare in seguito. – Xeo