Forum de la communauté SFML

Aide => Système => Discussion démarrée par: Cmdu76 le Juillet 01, 2016, 05:55:38 am

Titre: Rendu et logique dans des threads séparés
Posté par: Cmdu76 le Juillet 01, 2016, 05:55:38 am
Bonjour à tous,

Je suis en train d'essayer de séparer rendu et logique dans des threads différents.
Je n'arrive pas totalement à comprendre les mutex et le tutoriel du site sur les threads est un peu trop simple.

Si quelqu'un a un peu de temps peut-il me dire où je dois mettre les mutex dans cet exemple : https://gist.github.com/Cmdu76/0f4d7b579e3a86072782d9d64c3d006f (https://gist.github.com/Cmdu76/0f4d7b579e3a86072782d9d64c3d006f)

Ou alors m'expliquer rapidement comment faire. Parce qu'en fait j'ai l'impression que la fenêtre sera bloquée trop souvent et que le multi-threading ne servirait à rien.

Ou encore même un exemple ou un tutoriel un peu plus complexe que celui du site, en anglais ou français peu importe.

Et aussi on m'a dit que la lecture des variables (par exemple : window.isOpen()) ne posaient pas de problèmes thread-safe mais est-ce vrai ? Car ce n'est dit nul part dans les tutoriels que j'ai pu lire.

Merci d'avance pour votre aide !
Titre: Re : Rendu et logique dans des threads séparés
Posté par: zimzim le Juillet 20, 2016, 11:52:12 pm
Tu as trouvé tes réponses ?
Titre: Re : Rendu et logique dans des threads séparés
Posté par: janf le Novembre 09, 2016, 03:03:42 am
A mon avis si tu ne comprends pas les mutex tu n'as pas besoin de tutoriels plus complexes, plutôt plus complets. Cherche un tuto qui prend le multithreading de zéro.

Le mutex sert à faire en sorte de protéger différentes parties du programme pour s'assurer qu'elles ne s’exécutent pas en même temps. Donc elles doivent être protégées par le même mutex.

Par exemple si tu as un bout de code qui écrit dans un tableau, et un autre qui lit dans le même tableau, tu ne veux pas que ces deux morceaux de codes puissent s’exécuter en même temps dans deux threads de ton programme. (A moins d'utiliser un conteneur threadsafe.) Ainsi, tu "lock" les morceaux de code à protéger avec le mutex. Lorsqu'un thread lock le mutex, si l'autre thread arrive à la partie du programme qui est protégée par le même mutex, il devra attendre que le mutex soit libéré pour pouvoir le locker à son tour et exécuter la suite du code.

Utilise plutôt des lock que des mutex. Un lock bloque un mutex dans son constructeur et le débloque dans son destructeur. Ainsi en cas d'exception, le lock est détruit et libère automatiquement le mutex, ce qui évite que ton programme reste bloqué.
Titre: Re: Re : Rendu et logique dans des threads séparés
Posté par: trouncethink le Septembre 21, 2023, 04:45:53 pm
Tu as trouvé tes réponses ? eggy car (https://eggycar.net)
Le mutex empêche les sections logicielles de s'exécuter simultanément. Le même mutex doit les protéger. Utilisez des verrous, pas des mutex. Un verrou bloque et débloque les mutex dans leurs constructeurs et destructeurs. Si une exception se produit, le verrou est détruit et le mutex est libéré, empêchant ainsi le blocage du programme.