Maison  >  Article  >  développement back-end  >  Comment créer des applications à instance unique en C ou C : verrous de fichiers, mutex et au-delà ?

Comment créer des applications à instance unique en C ou C : verrous de fichiers, mutex et au-delà ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 16:44:30370parcourir

How to Create Single-Instance Applications in C or C  : File Locks, Mutexes, and Beyond?

Création d'applications à instance unique en C ou C

Introduction :

S'assurer qu'une seule L'instance d'une application exécutée simultanément est cruciale dans divers scénarios. Cet article explore les méthodes permettant de réaliser des applications à instance unique en C ou C.

Verrouillages de fichiers :

Les verrous de fichiers peuvent être appliqués à un fichier spécifique. Si un verrou est obtenu, seul le processus de détention peut accéder au fichier. Cela peut être utilisé pour empêcher l'exécution de plusieurs instances d'une application.

<code class="c">#include <sys/file.h>
int fd = open("lockfile", O_RDWR | O_CREAT);
int res = flock(fd, LOCK_EX | LOCK_NB);</code>

Mutex :

Les mutex sont utilisés pour la synchronisation. Un mutex peut être acquis par un seul thread, empêchant les autres threads d'accéder aux ressources partagées jusqu'à ce que le mutex soit libéré.

<code class="c">#include <pthread.h>
pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL);
pthread_mutex_lock(&mutex);
// Critical section
pthread_mutex_unlock(&mutex);</code>

Approche recommandée :

Une approche commune consiste à créer un fichier pidfile, un fichier contenant l'ID de processus de l'application en cours d'exécution. Si le fichier pid existe déjà, cela suggère qu'une autre instance de l'application est en cours d'exécution. Cette méthode présente cependant des limites en raison de fichiers pid obsolètes.

Méthodes avancées :

Des méthodes plus avancées incluent l'utilisation d'un socket de domaine Unix ou d'un identifiant unique pour garantir un seul exemple. Un socket de domaine Unix peut être lié à un nom spécifique, et seule la première instance de l'application peut se lier avec succès. Un identifiant unique peut être généré et stocké dans un segment de mémoire partagée pour vérification.

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