Gestion de l'exécustion parrallèle de fonctions

Résolu
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014 - 14 juin 2011 à 10:35
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014 - 5 juil. 2011 à 23:34
Bonjour,


Je me permet de poster pour la première fois dans ce site, car je suis débutante en c++ et suis bloquée sur un programme à réaliser.

En fait, je suis en train de développer un simulateur réseau (version simple) qui consiste à envoyer des paquets de différents flux dans une topologie réseaux et d'ajouter des délais introduits par chaque nœud réseau dans le chemin du paquet. J'ai défini mes classes flux, paquet, nœud réseau et port, toutefois, je ne vois pas trop comment faire évoluer en parallèle mes flux! :s

N'hésitez pas à partager avec moi vos suggestions, références utiles, documentation,... tout ce qui peut aider! :)

Merci d'avance de vos retours ^^

4 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
14 juin 2011 à 10:49
Salut,

Déjà sur le principe, si tu es débutante je doute fort que ce soit une bonne idée de commencer par du réseau et de la parallélisation. Enfin après tu fais ce que tu veux, surtout si tu as déjà une solide expérience dans d'autres langage tu peu très bien t'en sortir.

Bref, ceci dit, pour ton problème tu devrais regarder du côté des threads. Attention, avant toute utilisation des threards tu dois te renseigner sur ce qu'est le code réentrant et une section critique (voir également les infos sur les mutex et sémaphores).

Je te recommande également le lien suivant qui t'aidera à éviter certains problèmes liés à l'utilisation des mutex : use lock classes for mutex management.
3
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014
14 juin 2011 à 11:02
Salut,

Je vais commencer par me documenter sur ce que tu m'a suggéré pour avoir les idées claires!

Je ne te cache pas, je suis débutante en développement en général, ce que j'ai fait en programmation jusqu'à maintenant est du niveau débutant. En fonçant plus, je m'en sortirais je crois! :D

Merci de ton retour, et très bonne journée :)
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
19 juin 2011 à 12:48
Salut,

Je dis ça je dis rien mais il y avait peut être plus simple. Plutôt que de faire un thread par flux, tu aurais aussi pu faire un peu comme le système d'exploitation et faire un boucle sur tes flux.

Pseudo code :
while (1)
{
  for (i = 0; i < nbflux; i++)
  {
    UpdateFlux(Flux[i]);
  }
  Sleep(1);
}


D'autre part, les flux/paquets sont des choses inertes qui transites. J'aurais plutôt vu la partie traitement sur les noeuds (Avec par exemple une file d'attente en entrée).

Pseudo code :
while (1)
{
  for (i = 0; i < NodesCount; i++)
  {
    UpdateNode(nodes[i]);
  }
  Sleep(1);
}
void UpdateNode(Node node)
{
  for (i = 0; i < node.inputQueue.count; i++)
  {
    Packet currentPacket = node.inputQueue[i];
    OutputInterface dest = GetOutputInterface(node.RoutingTable, currentPacket);
    dest.Cable.add(currentPacket);
  }
}
0
hazelia Messages postés 40 Date d'inscription dimanche 4 juillet 2010 Statut Membre Dernière intervention 2 juin 2014
5 juil. 2011 à 23:34
Salut,

Effectivement, je crois qu'il est plus simple de gérer les flux en sa basant sur le principe des files d'attente sur chaque ressource de chaque nœud passe le paquet. Comme je l'ai mentionné au début de mon post, je suis débutante en c++ et j'ai du arrêter le développement de mon simulateur pour ce mois :S. Si j'arrive à mettre en ouevre mon programme, je le partagerai ;)

Merci^^

NB: Désolée pour le délai de réponse, un petit souci avec ma boite mail... :s
0
Rejoignez-nous