Message #1748
Sujet: [raknet] reseau simple sans serveur
| Type | Date | Auteur | Contenu |
|---|---|---|---|
| Création du message | 02-03-2007 14:46:47 | ptitfred |
En fait le passage de parametres à ton thread dépend un peu du système de threads. Mais quoi qu'il en soit puisque tu partages le meme espace mémoire tu peur agir de la facon suivante : Je te propose un exemple en java (non pas parce que c'est ce que tu vas utiliser mais c'est un des plus simples que je connaisse et surtout c'est celui dont je me souviens le mieux, voici : Voici en 2 mots ce que ca fait : En java tout est codé sous forme de classes, les threads y compris. En l'occurrence on va donc développer une classe héritant de java.lang.Thread. Le code exécuté par le thread sera celui contenu dans la méthode run(). Cette méthode a le meme role que main pour un programme. Puisqu'on travaille avec des objets, la méthode run() a accès aux champs de son objet. Ici 2 champs param1 et param2 qui sont affectés par le constructeur. Enfin on lance le thread sur une instance de cette classe avec la méthode start() (cf. main exemple) Comprends bien ceci : le multithreading a l'avantage de multiplier les fils d'exécution tout en partageant la même zone de mémoire (les variables, pointeurs etc). Aussi les différents threads vont accéder aux mêmes variables. Donc pour "configurer" un thread (ce que tu appelles à juste titre passage de parametres par analogie avec le main), il faut renseigner des variables et ensuite lancer le thread. Celui-ci "doit" consulter ces variables pour etre configuré. La condition est naturellement que ce code ait accès à ces variables (problème de portée). En C il suffit d'utiliser des variables globales, en C++ comme en Java et tout langage POO, une instance de classe est le plus naturel et le plus pertinent.
Ceci est de ta responsabilité ! En fait ce problème n'a d'impact que sur la viabilité de tes données. Si 2 threads accèdent en meme temps à la même variable et que les opérations effectuées ne sont pas atomiques, il y a un risque important que ces opérations se fasse en même temps et que cela ait des conséquences facheuses. Tu ne maitrises pas l'ordonnancement, c'est à dire l'ordre dans lequel les threads sont executés (je rappelle qu'on ne peut pas faire tourner 2 threads au meme moment sur le meme cpu (ou du moins sur le meme coeur de cpu...)). C'est le "systeme" (la JVM pour java, le noyau en C/C++) qui décide de quel thread s'execute. Ainsi pour eviter les problèmes (et quand cela est indispensable) on cherche à protéger certaines sections de codes de toute préemption (cad de perte du CPU au profit d'un autre thread). Ces sections de codes sont nommées "sections critiques" car elle doivent être protégées. Généralement on code cela avec des verrous, selon le schéma suivant : 1) acquisition du verrou 2) section critique 3) libération du verrou Tu comprendras facilement que ces aspects là sont très rapidement pénibles. Mais également souvent indispensable. Aussi quand on développe un programme parallele il convient à un moment donné de déterminer quel sections de codes sont critiques (de point de vue accès concurrentiel) et comment il faudra les protéger. Dans ton cas je ne pense pas "a priori" qu'il y en ait. Ceci est du à 2 choses : Les actions critiques sont celles qui modifient le modèle. Celui-ci ne sera a priori pas modifié en meme temps par 2 joueurs (tu peux interdire les actions du joueur tant que l'adversaire n'a pas joué, et finalement ca crée des sections critiques). Les actions de modifications seront pour la plupart atomiques. On dit qu'une action est atomique quand elle ne peut pas etre interrompue par le système, exemple : affectation, incrémentation opération binaire ou unaire. Cela dépend un peu d'un systeme / langage à l'autre, mais ca reste un concept commun à toute l'informatique parallèle. Je pense que tu as compris par toi même qu'un programme, même modeste, a très vite besoin de beaucoup de petites briques. Cependant il est indispensable de commencer par des programmes modestes pour maîtriser les concepts élémentaires et réussir à produire quelque chose qui marche. Après le passage à une plus grande échelle n'est souvent qu'une question de temps (donc de moyens). bon courage fred |
| Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
|---|---|---|---|---|
|
Préférences cookies Corrections |
![]() ![]() ![]() ![]() |
Propulsé par Django xhtml 1.0 css 2.1 |
884 membres 1440 sujets 11337 messages |
Dernier membre inscrit: Saidov17 155 invités en ligne membre en ligne: - RSS Feed |