std::lock
Aus cppreference.com
![]() | This page has been machine-translated from the English version of the wiki using Google Translate. The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
definiert in Header <mutex> | ||
template<class Lockable1, class Lockable2, class LockableN... > void lock( Lockable1& lock1, Lockable2& lock2, LockableN& lockn... ); | (seit C++11) | |
Sperrt den gegebenen
Lockable
Objekten lock1
, lock2
, ...
, lockn
mit einem Deadlock Vermeidung Algorithmus zur Deadlock zu vermeiden .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.
Die Objekte werden durch eine unbestimmte Reihe von Aufrufen
lock
gesperrt, try_lock
, unlock
. Wenn ein Aufruf an lock
oder unlock
führt zu einer Ausnahme wird unlock
für alle gesperrten Objekte, bevor erneute Auslösen genannt .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.
Inhaltsverzeichnis |
[Bearbeiten]Parameter
lock1, lock2, ... , lockn | - | Die Lockable Objekte zu sperrenOriginal: 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. |
[Bearbeiten]Rückgabewert
(None)
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.
[Bearbeiten]Beispiel
Das folgende Beispiel verwendet
std::lock
auf Paare von Mutexe ohne Stillstand zu sperren . 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 operationstd::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 timestd::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();}
[Bearbeiten]Siehe auch
(C++11) | Versuche, das Eigentum an Mutexe via wiederholten Aufforderungen an try_lock erhalten 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. (Funktions-Template) |