Forum de la communauté SFML

Aide => Système => Discussion démarrée par: Neckara le Juin 12, 2012, 08:53:04 pm

Titre: [résolut]Sémaphore
Posté par: Neckara le Juin 12, 2012, 08:53:04 pm
Bonjour,

Dans la SFML2.0, il y a des mutex mais pas de sémaphores.

J'aimerais donc savoir s'il vaut mieux utiliser une bibliothèque standard proposant des sémaphores (si oui laquelle ?) ou s'il vaut mieux utiliser des mutex avec une variable globale (en gros un singleton avec 3 méthodes statiques : lock, unlock, et getNbJetons).


Cordialement,
Neckara
Titre: Re : Sémaphore
Posté par: Laurent le Juin 12, 2012, 10:09:33 pm
Ca dépend évidemment de ton code. La plupart des situations peuvent être réglées avec uniquement des mutexs, et la différence de performances est complètement négligeable. Par contre il y a quelques situations où ce n'est pas acceptable.

Ensuite je ne vois pas bien le rapport entre sémaphore et singleton. Les sémaphores sont juste des généralisations de mutex (mutex = sémaphore à 1 jeton).

En ce qui concerne les éventuelles autres bibliothèques, je ne sais pas trop, mais il doit y avoir du choix en cherchant un peu. Privilégier la bibliothèque standard si tu peux te permettre du C++11.
Titre: Re : Sémaphore
Posté par: Neckara le Juin 13, 2012, 07:46:48 am
Merci pour votre réponse.

Mais je vois mal comment faire un sémaphore à partir de mutex.

- à chaque nouveau jeton disponible on libère le mutex.
- à chaque nouveau jeton pris on bloque le mutex.

-> mais comment faire si on a des jetons à libérer sans avoir des jetons à prendre ?

C'est pour cela que je pensais à un singleton :

Libérer un jeton :
- on bloque le mutex A
- on incrémente le nombre de jeton disponible
- on libère le mutex B
- on libère le mutex A

Prendre un jeton :
- on bloque le mutex A
- on décrémente le nombre de jeton disponible
- si le nombre de jeton est égal à 0 : on bloque le mutex B
- on débloque le mutex B

Mais après réflexion, le singleton n'est pas nécessaire et une classe pourrait faire l'affaire.
Titre: Re : [résolut]Sémaphore
Posté par: Orwel le Juillet 06, 2012, 03:11:27 pm
Citer
Mais je vois mal comment faire un sémaphore à partir de mutex.

Le mutex est une sémaphore particulière. Donc il faut que tu inverse ta logique.

Citer
mutex = sémaphore à 1 jeton
Titre: Re : [résolut]Sémaphore
Posté par: Neckara le Juillet 06, 2012, 03:52:15 pm
Merci pour votre réponse.
J'ai finalement utilisé les semaphores de pthread.