Maison  >  Article  >  développement back-end  >  Comment synchroniser les threads en C++ ?

Comment synchroniser les threads en C++ ?

王林
王林original
2024-06-05 09:08:57951parcourir

La synchronisation des threads en C++ fait référence à la coordination de l'accès des threads aux ressources partagées pour empêcher la concurrence des données et la destruction des ressources. Pour ce faire, les mutex peuvent être utilisés pour contrôler l'accès exclusif aux ressources partagées, et les variables de condition peuvent être utilisées pour coordonner la communication entre les threads. Dans les combats réels, les verrous mutex sont utilisés pour gérer les files d'attente de tâches, tandis que les variables de condition sont utilisées pour réveiller les threads en attente de nouvelles tâches, permettant ainsi une exécution coordonnée d'applications multithread.

Comment synchroniser les threads en C++ ?

Comment synchroniser les threads en C++ ?

Comprendre la synchronisation des threads

La synchronisation des threads fait référence à la coordination des threads exécutés simultanément pour garantir qu'ils accèdent aux ressources partagées de manière ordonnée. Divers mécanismes de synchronisation sont disponibles en C++ pour nous aider à y parvenir.

Mutex (Mutex)

Un mutex est un verrou utilisé pour contrôler l'accès exclusif aux ressources partagées. Un seul thread à la fois est autorisé à détenir le verrou mutex, ce qui évite les courses de données et la corruption des ressources.

Exemple de code :

#include <thread>
#include <mutex>

int shared_value = 0;

// 创建互斥锁
std::mutex m;

void increment_shared_value() {
  // 获取互斥锁
  m.lock();
  // 临界区:独占访问共享值
  ++shared_value;
  // 释放互斥锁
  m.unlock();
}

Variable de condition (Variable de condition)

Les variables de condition sont utilisées pour coordonner la communication entre les threads. Un thread peut utiliser une variable de condition pour attendre qu'une condition spécifique soit remplie, tandis qu'un autre thread peut utiliser notify_one() ou notify_all() pour réveiller le thread en attente.

Exemple de code :

#include <thread>
#include <condition_variable>

bool condition_met = false;
std::condition_variable cv;
std::mutex m;

void wait_for_condition() {
  // 获取互斥锁
  std::unique_lock<std::mutex> lock(m);
  
  // 等待条件得到满足
  cv.wait(lock, [] { return condition_met; });
  
  // 条件已得到满足,可以继续执行
  // ...
}

Cas pratique :

Considérons un programme multithread qui assigne plusieurs tâches à différents threads. Afin de coordonner l'exécution des tâches, nous pouvons utiliser des verrous mutex pour empêcher plusieurs threads d'accéder à la file d'attente des tâches en même temps. Les variables de condition peuvent être utilisées pour réveiller les threads en attente de nouvelles tâches.

Conclusion :

Les verrous Mutex et les variables de condition sont de puissants mécanismes de synchronisation en C++, ils nous permettent de contrôler l'accès aux ressources et la communication entre les threads. En comprenant et en utilisant ces mécanismes, nous pouvons écrire des applications multithread robustes qui tirent pleinement parti de l'architecture multicœur des ordinateurs modernes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn