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

[Résolu]
Signaler
Messages postés
40
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
2 juin 2014
-
Messages postés
40
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
2 juin 2014
-
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

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
13
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.
Messages postés
40
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
2 juin 2014

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 :)
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
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);
  }
}
Messages postés
40
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
2 juin 2014

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