std::mutex
De cppreference.com
<tbody>
</tbody>
| Dclar dans l'en-tte <mutex>
|
||
class mutex; |
(depuis C++11) | |
La classe mutex est une primitive de synchronisation qui peut tre utilise pour protger des donnes partages simultanment par plusieurs threads.
Le mutex propose une smantique de proprit exclusif et non-rcursif :
- Un thread appelant possde un
mutexquand il russit l'appellockoutry_locket cela jusqu' ce qu'il appelleunlock. - Quand un thread possde un
mutex, tous les autres threads bloqueront (pour les appelslock) ou recevront une valeur de retourfalse(pourtry_lock) s'ils tentent de revendiquer la proprit dumutex. - Un thread appelant ne doit pas possder un
mutexavant d'appelerlockoutry_lock.
Le comportement d'un programme n'est pas dfini si un mutex est dtruit alors qu'il est toujours dtenu par un autre thread. La classe mutex n'est ni copiable ni dplaable.
Types de membres
| Type du membre | Dfinition |
native_handle_type
|
dfinie par l'implmentation |
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) | |
dverrouille 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 dfinie par l'implmentation 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 protger 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();
}
Rsultat :
http://bar => fake content
http://foo => fake content