2009-09-11 7 views
1

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

Quelqu'un peut-il me diriger vers la documentation sur ceci en C/C++ pour Unix? Exemple de code pour utiliser cette structure serait génial.

Merci

+0

@rsinha pourquoi vous ne pouvez pas utiliser sémaphores entre les processus? Les processus AFAIK n'ont besoin que de connaître l'identifiant du sémaphore pour pouvoir le gérer –

Répondre

1

On dirait que vous seriez mieux d'utiliser flock(2):

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

Comment utiliser UNIX IPC pour créer une file d'attente partagée. Un processus lit la file d'attente et écrit dans le fichier, tous les autres processus poussant les données dans la file d'attente.

3

en train de mettre une sémaphores mémoire partagée n'est pas la meilleure solution à ce problème (si cela fonctionnerait même pas du tout). Vous devez étudier le verrouillage des fichiers, qui est une fonctionnalité UNIX spécialement conçue pour fournir une exclusivité aux rédacteurs de fichiers.

Plus précisément, consultez:

Pour les matières plus explicative, voir Advanced Programming in the UNIX Environment, section 14.3

2

Vous pouvez utiliser mutex PTHREAD. Lors de l'initialisation d'un mutex, vous devez utiliser la fonction pthread_mutexattr_setpshared pour que le mutex soit partagé entre les processus, puis le placer dans une mémoire partagée. Tous les processus peuvent se connecter à la mémoire partagée, puis accéder au mutex.

Aussi, vous pouvez ajouter des attributs supplémentaires à la SHM en fonction de votre exigence de verrouillage (récursif, etc.,)

Questions connexes