Dans une classe d'études supérieures, nous avons dû utiliser des sémaphores pour accomplir le travail avec des fils.
Nous avons été dirigés d'utiliser Le prototype (et le fichier d'en-tête) de SEM_INIT CODE> avec un groupe d'autres procédures SEM_ *, mais nous n'avons pas reçu beaucoup d'informations sur les détails de chacune de ces méthodes SEM_ *. P>
sem_init code> est ce qui suit : p>
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
4 Réponses :
Je dirais qu'il n'y a pas de différence significative entre la valeur S 1, 2, 5 et ainsi de suite par rapport au paramètre code> partagé code>. Il est probablement écrit de cette façon parce que lorsque l'API a été créée pour la première fois, c n'a pas eu de type booléen. P>
Alors cela en fait une API obsolète?
Je ne sais pas: il y a de la valeur parfois dans l'utilisation d'une API "essayée et testée" plus ancienne. Vous devriez le regarder du point de vue des choses comme l'efficacité et les défauts de sécurité évidents pour dire si c'était vraiment obsolète ou non
Sneakyness: oui et non. Non dans ces Pthreads, le choix plus moderne, ne semble pas avoir de mise en œuvre du sémaphore, donc pour les cas où vous voulez des sémaphores, c'est l'API que vous devriez utiliser. Oui, dans cela, pour la plupart des cas, les mutiles et les conditions feront une bonne amende à la place des sémaphores.
La version glibc de "L'argument pshared indique si ce sémaphores est d'être
partagée entre les fils d'un processus, ou entre les processus. " p>
blockQuote>
Il serait mieux si le booléen était une sorte d'énumération (par exemple sem_init code> (ce que vous obtenez si vous
man sem_init code> sous Linux) a ceci à dire: p>
pshared code> est une valeur booléenne: dans la pratique des valeurs significatives qui lui sont transmises sont
false code> (
0 code>) et
true code> (
1 code>), bien que toute valeur non 0 sera considéré comme vrai. Si vous passez 0, vous obtiendrez un sémaphores qui peut être consulté par d'autres threads dans le même processus - essentiellement un verrou en cours. Vous pouvez l'utiliser comme un mutex, ou vous pouvez l'utiliser de façon plus générale pour les propriétés de comptage des ressources d'un sémaphores. On peut dire que si une API pthreads pris en charge sémaphores vous pas besoin de cette caractéristique de
sem_init code>, mais sémaphores dans pthreads de PRECEDE Unix par un peu de temps. P>
SEM_PROCESS_PRIVATE code> vs
SEM_PROCESS_SHARED code>), parce que vous ne l'auriez pas eu cette question, mais sémaphores POSIX sont une API assez vieux que ces choses se passent. p>
Ce n'est pas un PC d'appeler cette version comme appartenant à GLIBC. C'est POSIX.1-1-2001.
Vous pouvez utiliser pthread_process_private code> et
pthread_process_shared code> à partir de
pthread.h code>, ils ont les bonnes valeurs (pas une coïncidence).
L'argument frontal indique si ce sémaphore doit être partagé entre les threads d'un processus ou entre les processus. P>
Si la valeur a la valeur 0, le sémaphore est partagé entre les threads d'un processus et doit être situé à une adresse visible à toutes les threads (par exemple, une variable globale ou une variable allouée de manière dynamique sur le tas. ). p>
Si maussade est non nulle, le sémaphore est partagé entre les processus et doit être situé dans une région de mémoire partagée (voir shm_open (3), MMAP (2) et shmget (2)). (Étant donné qu'un enfant créé par Fork (2) hérite des mappages de mémoire de ses parents, il peut également accéder au sémaphore.) Tout processus pouvant accéder à la région de mémoire partagée peut fonctionner sur le sémaphore à l'aide de SEM_POST (3), SEM_POST (3), etc. . p>
L'argument frontal indique si ce sémaphore doit être partagé entre les threads d'un processus ou entre les processus.Si Pshared a la valeur 0, puis le sémaphore est partagé entre les threads d'un processus et doit être situé à certains adresse visible pour tous les threads.Si Pshared est non nulle, puis le sémaphore est partagé entre les pharmacies et doit être situé dans une région de mémoire partagée. P>
Quelle est la valeur supplémentaire de cette réponse concernant d'autres réponses ici?