Question

J'ai 10 processus en cours d'exécution, chacun écrivant dans le même fichier. Je ne veux pas de multiples écrivains, je recherche donc essentiellement un sémaphore mutex / binaire pour protéger les écritures de fichiers. Le problème est que je ne peux pas partager le sémaphore entre 10 processus. Je cherche donc à utiliser la mémoire partagée entre 10 processus et à le placer dans la mémoire partagée de manière à ce que chaque processus puisse y accéder.

Quelqu'un peut-il m'indiquer une documentation à ce sujet en C / C ++ pour Unix? Un exemple de code pour utiliser cette structure serait génial.

Merci

Était-ce utile?

La solution

Il semble que vous feriez mieux d'utiliser flock (2) :

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);

Autres conseils

Mettre un sémaphore en mémoire partagée n’est pas la meilleure solution à ce problème (même si cela fonctionnerait du tout). Vous devriez étudier le verrouillage de fichiers, une fonctionnalité UNIX spécialement conçue pour offrir une exclusivité aux rédacteurs de fichiers.

Plus précisément, consultez:

Pour plus d'informations, voir Programmation avancée dans l'environnement UNIX, section 14.3

Jetez un coup d’oeil à Programmation réseau UNIX, Vol. 2 de W. Richard Stevens.

C’est le meilleur livre jamais écrit sur ce sujet.

Vous pouvez utiliser les mutex PTHREAD. Lors de la création d’un mutex, vous devez utiliser la fonction pthread_mutexattr_setpshared . partagé entre les processus et ensuite mettre cela dans une mémoire partagée. Tous les processus peuvent s’attacher à la mémoire partagée puis accéder au mutex.

Vous pouvez également ajouter des attributs supplémentaires au module SHM en fonction de vos besoins en matière de verrouillage (récursif, etc.)

.

Pourquoi ne pas utiliser UNIX IPC pour créer une file d'attente partagée? Un processus lit la file d'attente et écrit dans un fichier, tous les autres processus poussant des données dans la file d'attente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top