2010-02-11 11 views

Répondre

11

Oui, dans de nombreuses plates-formes sémaphores peuvent synchroniser à travers les processus. Vous utiliseriez des sémaphores "nommés" pour cela - plusieurs processus accèdent à l'objet par un nom, similaire aux objets du système de fichiers.

Dans POSIX, vous pouvez créer des sémaphores nommés via sem_open(). Pour les sémaphores non nommés, si le deuxième paramètre à sem_init() est différent de zéro, il peut s'agir d'interprocess, bien que je ne sache pas exactement comment un sémaphore interprocessus sans nom est supposé fonctionner.

Notez que sur certains systèmes, ces fonctions peuvent échouer avec ENOSYS si les sémaphores interprocess ne sont pas supportés (par exemple OpenBSD).

Sous Windows, vous pouvez créer des sémaphores nommés via CreateSemaphore() comme l'a mentionné @sergiom.

+0

Depuis la version 5.4 (Nov 2013) OpenBSD a [nommé sémaphores] (http://www.openbsd.org/cgi-bin/man.cgi?query=sem_open&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format= html). Voir [ce billet de blog] (http://www.tedunangst.com/flak/post/sem-open-named-semaphores) – user454322

+0

Re: "Je ne suis pas sûr de savoir exactement comment un sémaphore interprocessus sans nom est supposé fonctionner": Vous pouvez mettre le sémaphore dans la mémoire partagée. De même, si vous créez un sémaphore interprocessus sans nom dans la mémoire normale, puis appelez 'fork()', vous disposez de l'IPC entre les processus parent et enfant. Dans les deux cas, bien sûr, un sémaphore sans nom est détectable de la même manière qu'un sémaphore nommé. Mais vous n'avez généralement besoin d'un sémaphore que s'il existe d'autres relations entre les processus. – ruakh

1

Les sémaphores POSIX peuvent être non nommés ou nommés. Les sémaphores sans nom sont alloués dans la mémoire de processus et initialisés. Les sémaphores sans nom peuvent être utilisés par plusieurs processus, en fonction de la manière dont le sémaphore est alloué et initialisé. [...]

Voulez-vous savoir more?

1

fait Sémaphore est un outil de synchronisation, mais il est compté comme un IPC bcoz il est accédé par plus d'une opération

0

IPC a trois usage différent, comme l'échange de données (file d'attente de message, PIPE, FIFO), la synchronisation (fichier verrous, sémaphore, MUTEX) et les signaux.