Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [résolut]Sémaphore  (Lu 3010 fois)

0 Membres et 1 Invité sur ce sujet

Neckara

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
[résolut]Sémaphore
« 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
« Modifié: Juin 13, 2012, 09:19:55 pm par Neckara »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Sémaphore
« Réponse #1 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.
Laurent Gomila - SFML developer

Neckara

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
Re : Sémaphore
« Réponse #2 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.

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : [résolut]Sémaphore
« Réponse #3 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

Neckara

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
Re : [résolut]Sémaphore
« Réponse #4 le: Juillet 06, 2012, 03:52:15 pm »
Merci pour votre réponse.
J'ai finalement utilisé les semaphores de pthread.