std::mutex
De cppreference.com
<tbody>
</tbody>
| Déclaré dans l'en-tête <mutex>
|
||
class mutex; |
(depuis C++11) | |
La classe mutex est une primitive de synchronisation qui peut être utilisée pour protéger des données partagées simultanément par plusieurs threads.
Le mutex propose une sémantique de propriété exclusif et non-récursif :
- Un thread appelant possède un
mutexquand il réussit l'appel àlockoutry_locket cela jusqu'à ce qu'il appelleunlock. - Quand un thread possède un
mutex, tous les autres threads bloqueront (pour les appels àlock) ou recevront une valeur de retourfalse(pourtry_lock) s'ils tentent de revendiquer la propriété dumutex. - Un thread appelant ne doit pas posséder un
mutexavant d'appelerlockoutry_lock.
Le comportement d'un programme n'est pas défini si un mutex est détruit alors qu'il est toujours détenu par un autre thread. La classe mutex n'est ni copiable ni déplaçable.
Types de membres
| Type du membre | Définition |
native_handle_type
|
définie par l'implémentation |
Fonctions membres
construit le mutex Original: constructs the mutex The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (fonction membre publique) | |
Verrouiller | |
| verrouille le mutex, bloque si le mutex n'est pas disponible (fonction membre publique) | |
essaie de verrouiller le mutex, retourne si le mutex n'est pas disponible Original: tries to lock the mutex, returns if the mutex is not available The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (fonction membre publique) | |
déverrouille le mutex Original: unlocks the mutex The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (fonction membre publique) | |
Original: Native handle The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. | |
retourne le handle de thread sous-jacente définie par l'implémentation Original: returns the underlying implementation-defined thread handle The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (fonction membre publique) | |
Exemple
Cet exemple montre comment un mutex peut être utilisé pour protéger une map
#include <iostream>
#include <chrono>
#include <thread>
#include <mutex>
#include <map>
#include <string>
std::map<std::string, std::string> g_pages;
std::mutex g_pages_mutex;
void save_page(const std::string &url)
{
// simulate a long page fetch
std::this_thread::sleep_for(std::chrono::seconds(2));
std::string result = "fake content";
g_pages_mutex.lock();
g_pages[url] = result;
g_pages_mutex.unlock();
}
int main()
{
std::thread t1(save_page, "http://foo");
std::thread t2(save_page, "http://bar");
t1.join();
t2.join();
g_pages_mutex.lock();
for (const auto &pair : g_pages) {
std::cout << pair.first << " => " << pair.second << '\n';
}
g_pages_mutex.unlock();
}
Résultat :
http://bar => fake content
http://foo => fake content