Pour la programmation multithread, il est essentiel d'assurer une bonne synchronisation. Les verrous lecteur/enregistreur fournissent une solution pour les scénarios dans lesquels les données sont accédées simultanément par plusieurs lecteurs et un seul écrivain. Explorons comment implémenter des verrous lecteur/enregistreur en C.
Depuis C 14, la bibliothèque standard fournit une solution intégrée avec std :: shared_mutex. La syntaxe est :
#include <shared_mutex> typedef std::shared_mutex Lock; typedef std::unique_lock<Lock> WriteLock; typedef std::shared_lock<Lock> ReadLock;
Pour utiliser ces verrous :
Lock myLock; void ReadFunction() { ReadLock r_lock(myLock); // Perform read-only operations here } void WriteFunction() { WriteLock w_lock(myLock); // Perform write operations here }
Si vous utilisez une ancienne version de C ou n'avez pas accès aux fonctionnalités standard de la bibliothèque, vous pouvez utiliser la bibliothèque Boost pour créer des verrous lecteur/écrivain :
#include <boost/thread/locks.hpp> #include <boost/thread/shared_mutex.hpp> typedef boost::shared_mutex Lock; typedef boost::unique_lock<Lock> WriteLock; typedef boost::shared_lock<Lock> ReadLock;
L'utilisation est similaire à la version de la bibliothèque standard :
Lock myLock; void ReadFunction() { ReadLock r_lock(myLock); // Perform read-only operations here } void WriteFunction() { WriteLock w_lock(myLock); // Perform write operations here }
En comprenant et en implémentant des verrous de lecture/écriture, vous pouvez optimiser vos applications multithread pour les scénarios dans lesquels les modèles d'accès aux données se composent de plusieurs lecteurs simultanés et un seul écrivain peu fréquent.
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!