Verrouillages lecteur/écrivain en C : optimisation pour les lecteurs fréquents
En C, la gestion des accès simultanés aux données partagées nécessite des techniques de synchronisation efficaces. Pour les scénarios avec un modèle dominant de lecteurs fréquents et d'écrivains peu fréquents, les verrous lecteur/écrivain offrent une solution optimale.
Approche standard (C 14 et versions ultérieures)
Commençant par C 14, la bibliothèque standard fournit la classe std::shared_mutex pour implémenter les verrous lecteur/enregistreur. Il permet à plusieurs threads d'acquérir simultanément des verrous partagés (en lecture seule) tout en limitant l'acquisition de verrous exclusifs (en écriture) à un seul thread à la fois. Vous pouvez utiliser l'extrait de code suivant pour configurer un verrou partagé :
Lock myLock; ReadLock r_lock(myLock); // Acquire a shared (read) lock
Pour un accès exclusif en écriture, utilisez un verrou unique :
WriteLock w_lock(myLock); // Acquire an exclusive (write) lock
Approche Boost Library
Si votre base de code utilise un ancien standard ou un compilateur C, vous pouvez tirer parti de l'implémentation des verrous de lecture/écriture par la bibliothèque Boost. Boost fournit la classe boost::shared_mutex, qui fonctionne de manière similaire à la version standard de la bibliothèque :
Lock myLock; ReadLock r_lock(myLock); // Acquire a shared (read) lock WriteLock w_lock(myLock); // Acquire an exclusive (write) lock
Déverrouillage
Une fois que vous avez terminé les opérations gardées par un lecteur/ verrou d'écriture, pensez à libérer le verrou en appelant unlock() sur l'objet verrou :
r_lock.unlock(); // Release the shared (read) lock w_lock.unlock(); // Release the exclusive (write) lock
En implémentant des verrous lecteur/enregistreur, vous pouvez optimiser efficacement le code multithread pour les cas où les opérations de lecture sont plus nombreuses que les opérations d'écriture, garantissant ainsi un accès simultané efficace aux ressources partagées.
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!