std::lock
Da cppreference.com.
|
|
Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate.
La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
| Defined in header <mutex>
|
||
| template< class Lockable1, class Lockable2, class LockableN... > void lock( Lockable1& lock1, Lockable2& lock2, LockableN& lockn... ); |
(dal C++11) | |
Blocca la data
Lockable oggetti lock1, lock2, ..., lockn utilizzando un algoritmo di evitare deadlock per evitare situazione di stallo.Original:
Locks the given
Lockable objects lock1, lock2, ..., lockn using a deadlock avoidance algorithm to avoid deadlock.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Gli oggetti sono bloccati da una serie non precisata di chiamate verso
lock, try_lock, unlock. Se una chiamata a lock o unlock genera un'eccezione, unlock si chiama per tutti gli oggetti bloccati prima rethrowing.Original:
The objects are locked by an unspecified series of calls to
lock, try_lock, unlock. If a call to lock or unlock results in an exception, unlock is called for any locked objects before rethrowing.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Indice |
[modifica] Parametri
| lock1, lock2, ... , lockn | - | il
Lockable oggetti da bloccareOriginal: the Lockable objects to lockThe text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
[modifica] Valore di ritorno
(Nessuno)
Original:
(none)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[modifica] Esempio
Nell'esempio seguente viene utilizzato per bloccare
std::lock coppie di mutex senza stallo .
Original:
The following example uses
std::lock to lock pairs of mutexes without deadlock.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <mutex> #include <thread> #include <iostream> #include <vector> #include <functional> #include <chrono> struct Employee { Employee(int id) : id(id) {} int id; std::vector<int> lunch_partners; std::mutex m; }; void send_mail(Employee &e1, Employee &e2) { // simulate a time-consuming messaging operation std::this_thread::sleep_for(std::chrono::seconds(1)); } void assign_lunch_partner(Employee &e1, Employee &e2) { // use std::lock to acquire two locks without worrying about // other calls to assign_lunch_partner deadlocking us std::lock(e1.m, e2.m); e1.lunch_partners.push_back(e2.id); e2.lunch_partners.push_back(e1.id); e1.m.unlock(); e2.m.unlock(); send_mail(e1, e2); send_mail(e2, e1); } int main() { Employee alice(0), bob(1), christina(2), dave(3); // assign in parallel threads because mailing users about lunch assignments // takes a long time std::vector<std::thread> threads; threads.emplace_back(assign_lunch_partner, std::ref(alice), std::ref(bob)); threads.emplace_back(assign_lunch_partner, std::ref(christina), std::ref(bob)); threads.emplace_back(assign_lunch_partner, std::ref(christina), std::ref(alice)); threads.emplace_back(assign_lunch_partner, std::ref(dave), std::ref(bob)); for (auto &thread : threads) thread.join(); }
[modifica] Vedi anche
| (C++11) |
tentativi di ottenere la proprietà del mutex con ripetute chiamate a try_lock Original: attempts to obtain ownership of mutexes via repeated calls to try_lock The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (funzione di modello) |