cyte a écrit :
voici la procedure de la procedure executee par le thread crée : le smutex et autres permettent d'acceder à une memoire partagée de manière sûre je crois. Mais à priori ça ne me permettra pas de ne rater aucun message!! PS : le code envoyé est moche, jen convient; il s'agit juste d'un test de com inter thread pour debuter....
|
Ok lol. T'es plutôt mal barré pour faire du multithread, là.
Une règle de base: tout espace mémoire partagé par deux threads, dont au moins un en écriture exige nécessairement une synchronisation entre les threads.
Allez, lis ça et sois sûr de comprendre complètement l'article avant d'écrire une seule ligne de code nouvelle:
http://www.codeproject.com/KB/thre [...] ation.aspx
http://www.pluralsight.com/article [...] ep0597.htm
http://www.codeproject.com/KB/thre [...] reads.aspx
Ce qui n'est pas explicitement dit dans le premier article (mais ça l'est dans le 2e) est qu'il est d'usage de créer une classe qui encapsule les lock/unlock, ajoute quelques traces de débogage avec la directive de compilation qui va bien, et de l'instancier sur la pile dans la fonction où le mutex/section critique est nécessaire.
Ainsi, pas de soucis en cas de levée d'exception dans la section critique, le lock est délocké automatiquement (de toute façon, les exceptions dans les sections critiques, c'est déconseillé si on veut de la perf).
Et bien évidemment, que tout appel de fonction accédant à la ressource partagée par les threads et ne faisant pas elle-même la synchronisation doit se trouver dans un mutex. Ce qui signifie en pratique que dans le mutex, il vaut mieux mettre le moins de code possible et vérifier le code de toutes les fonctions appelées, que les méthodes appelées sont compatibles multithread. Enfin, dans certains cas, il est bon de vérifier que le mutex est réentrant.
Message édité par el muchacho le 28-06-2008 à 09:27:53
---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien