Namensräume
Varianten

std::lock

Aus cppreference.com
< cpp‎ | thread

 
 
Thema Support-Bibliothek
Threads
Original:
Threads
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
thread(C++11)
this_thread Namespace
Original:
this_thread namespace
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
get_id(C++11)
yield(C++11)
sleep_for(C++11)
sleep_until(C++11)
Gegenseitigen Ausschluss
Original:
Mutual exclusion
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
mutex(C++11)
timed_mutex(C++11)
Generische Sperrverwaltung
Original:
Generic lock management
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
lock(C++11)
try_lock(C++11)
defer_lock
try_to_lock
adopt_lock
(C++11)
(C++11)
(C++11)
Zustand Variablen
Original:
Condition variables
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
condition_variable(C++11)
condition_variable_any(C++11)
notify_all_at_thread_exit(C++11)
cv_status(C++11)
Futures
Original:
Futures
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
promise(C++11)
future(C++11)
shared_future(C++11)
packaged_task(C++11)
async(C++11)
 
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.
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.

Inhaltsverzeichnis

[Bearbeiten]Parameter

lock1, lock2, ... , lockn -
Die Lockable Objekte zu sperren
Original:
the Lockable objects to lock
The 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.

[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.

#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)[edit]
close