Nom et sans nom de Sémaphore
J'essaie de comprendre les similitudes et les différences entre nommés ou anonymes sémaphore donc mes recherches sur google m'a donné cette. J'avais une question au sujet de la rédaction sur la page, il est dit:
- Sans nom sémaphores peuvent être utilisable par plus d'un processus
- Nommé les sémaphores sont partageable par plusieurs processus
Faire ces deux mots crée aucune distinction importante entre ces deux types de sémaphores ou sont-ils inutiles?
Donc, jusqu'à présent, voici ce que j'ai:
Similarities
-Several processes can do something with the semaphore
Difference
-Named are referenced with pathname and unnamed are referenced by pshared value
C'est tout ce que je pouvais tirer de cette définition. C'est que tout et sont-ils corrects? Ou suis-je manque considérablement de concept?
OriginalL'auteur Richard | 2012-10-30
Vous devez vous connecter pour publier un commentaire.
Penser en termes de qui pouvez accéder au sémaphore.
Sans nom sémaphores (dépourvu de tout nom ou la poignée pour les localiser) doit exister dans certains pré-existant, convenu d'emplacement de mémoire. Habituellement, c'est (1) de la mémoire partagée (héritée par les enfants après
fork
) dans le cas de processus enfants; ou (2) de la mémoire partagée, la variable globale ou le segment de mémoire dans le cas où elles sont partagées entre les threads d'un même processus. L'essentiel ici est que le code de la mère, de l'enfant, ou de fils connaît déjà l'adresse du sémaphore.Nommé les sémaphores sont nécessaires pour sans rapport avec les processus. Par exemple, un producteur et un consommateur peut être écrit par deux développeurs et exécuter en tant qu'absolument aucun rapport avec les processus. Mais ils ont à partager certaines ressources, qui doit être protégé par un sémaphore. Le sémaphore nommé leur donne un chemin d'accès vers le sémaphore.
En réalité, vous pouvez utiliser un sémaphore nommé dans tous les scénarios, mais ils viennent avec un peu de bagages supplémentaire parce que vous avez à traiter avec les chemins d'accès et les autorisations et tels qui sont inutiles si les programmes sont liés et déjà savoir comment accéder à un anonyme du sémaphore. C'est un peu ridicule, par exemple, d'utiliser un sémaphore nommé pour partager une ressource entre les threads. Les fils ont déjà accès à la même mémoire où un anonyme du sémaphore peut résider.
OriginalL'auteur Duck
Accepté la réponse est fausse (aussi bien l'un que l'autre donnée par @electron). Sans nom sémaphores POSIX peut être utilisé sans lien de parenté avec les processus. Vous avez juste à stocker la structure de données dans la mémoire partagée, accessible par les processus pertinents et init avec la partageable drapeau à une, comme indiqué ici (copié sans vergogne de http://blog.superpat.com/2010/07/14/semaphores-on-linux-sem_init-vs-sem_open/):
Un autre processus de mappage de mémoire partagée dans son espace d'adressage peuvent accéder à la même sémaphore et de les synchroniser avec le processus d'origine. Voir aussi la spécification POSIX de sem_init() et ses linux page de man.
OriginalL'auteur stefanct
Nommé sémaphore a un
actual name
dans lefile system
et peut êtreshared
par de multiples sans rapport avec les processus de.Sans nom sémaphores peut être utilisé que par
threads
appartenant à la même processus.sémaphores sont créé à l'aide de la fonction
où
ptr_semaphore: un pointeur vers le sémaphore
drapeau: un drapeau indiquant le niveau de partage
initial_value: les sémaphores de la valeur initiale
Si vous passez
flag=0
àsem_init()
puis sémaphore peutêtre partagées uniquement par les threads appartenant au processus de qui a créé le sémaphore.Ainsi, il permettra de créer unamed sémaphore.
Le passage d'un valeur différente de zéro serait
allow
d'autres processus d'accès au sémaphore ainsi. Ainsi, il en résultera nommé sémaphore.OriginalL'auteur Prateek Joshi