Comment synchroniser les processus via une bibliothèque statique sur Linux?

J’ai un projet de devoirs qui nécessite la création d’une bibliothèque STATIC pour fournir un access mutuel à quelques tuyaux nommés.

Ces canaux servent à la communication entre différents clients utilisant la bibliothèque et un serveur.

Maintenant, supposons que je veuille utiliser des mutex pthread; Comment puis-je y arriver? Comment les processus peuvent-ils savoir quelle est la zone de mémoire partagée dans laquelle le mutex est stocké? Et qui devrait avoir besoin de cette zone de mémoire? Le serveur ne peut pas, car la bibliothèque elle-même doit fournir une exclusion mutuelle.

Grâce à asveikau, j’ai trouvé ceci:

#define SHARED 1 #define MUTEX 1 int main() { sem_t* mutex = sem_open("mutex", O_CREAT); sem_init(mutex, SHARED, MUTEX); fork(), fork(), fork(); sem_wait(mutex); int i; for(i = 0; i < 10; i++) printf("process %d %d\n", getpid(), i), fflush(stdout); sem_post(mutex); } 

que la sortie semble vraiment résoudre mon problème.

Merci tout le monde.

Je note cela comme un commentaire, mais cela mérite une réponse, je pense.

Comme d’autres le disent, les mutex pthread ne sont pas des processus croisés. Ce dont vous avez besoin est un “mutex nommé”. Vous pouvez utiliser sem_open pour créer un sémaphore sem_open et lui atsortingbuer un nombre initial de 1. Dans ce cas, sem_wait devient “verrou mutex” et sem_post devient “mutex unlock”.

Notez que sem_open , bien que faisant partie de POSIX, n’est pas universellement pris en charge. Je pense que cela fonctionne sous Linux et Mac OS X. Probablement Solaris si vous vous en souciez (ces jours-ci, probablement plus). Je sais ENOSYS OpenBSD, il échoue toujours avec ENOSYS . YMMV.