Forum de la communauté SFML
Aide => Système => Discussion démarrée 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
-
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.
-
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.
-
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.
mutex = sémaphore à 1 jeton
-
Merci pour votre réponse.
J'ai finalement utilisé les semaphores de pthread.