CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Classer des threads

john-lock
john-lock
Niveau 6
08 octobre 2013 à 14:27:41

Bonjour à tous,

Je viens vous voir car j'ai besoin d'un coup de main.
Je possède une liste de threads qui font globalement la même choses. Ils sont numérotés de 1 à N je voudrais connaitre dans quelle ordre ils se sont terminés.

Pour le moment la seule idée que j'ai eu est de mettre à jour une liste avec le numéro du thread. Pour éviter que 2 ou + threads aient accès à la liste en même temps j'ai mis un mutex dessus.

Ce qui donne en gros :

fonction thread(
le thread fait son job
appel fonction add_list
exit_thread
)

et dans la fonction add_list

fonction add_list(
mutex_lock
update list
mutex_unlock
)

Vous pensez que c'est la bonne idée ? ou il y a un meilleur moyen de faire ça ?

Merci par avance,

godrik
godrik
Niveau 30
08 octobre 2013 à 16:08:17

Je n'ai pas compris ce que tu cherches a faire globalement. Decris plus ton probleme.

john-lock
john-lock
Niveau 6
08 octobre 2013 à 16:29:36

J'ai créé un nombre N de threads et je les lance en même temps. Tous ces threads s'exécutent donc en même temps.

Mon but est de savoir dans quel ordre ils se sont terminés.

Je dois pourvoir dire : par exemple

1er thread : thread numéro 5 (le + rapide)
2eme thread : thread numéro 12
3eme thread : thread numéro 1
etc...

Pour ça j'utilise une liste. Dès que le thread arrive à la fin il écrit son numéro dans une liste. Cette liste étant accessible par N threads devient donc une ressource critique je gère donc l'accès à cette liste par un mutex.

angivare
angivare
Niveau 10
08 octobre 2013 à 16:38:45

Hum oui c'est bien ton idée de liste mais vu que c'est des opérations asynchrones tu vas récupérer le résultat où et que vas-tu en faire?

godrik
godrik
Niveau 30
08 octobre 2013 à 17:08:28

John, si tu veux connaitre l'ordre pourvanalyser du desiquilibre de charge, le mieux est certainement de regarder l'heure et de l'enregistrer dans un tableau puis de le trier.

john-lock
john-lock
Niveau 6
08 octobre 2013 à 21:24:45

Merci à vous deux.

Oui j'avais aussi pensé à utiliser un tableau avec le temps d'exécution du thread. Pour le moment j'ai mis en place, ma première solution ça semble marcher. Mais l'idée d'un tableau me semble meilleur pour manipuler les résultats après.

Pseudo supprimé
Pseudo supprimé 09 octobre 2013 à 02:09:41

les mutex de winapi et pthread ne sont pas FIFO [1], si plusieurs threads se retrouvent en même temps dans la zone d'attente, l’ordre n'est plus garanti.

[1] http://fr.wikipedia.org/wiki/First_in,_first_out

godrik
godrik
Niveau 30
09 octobre 2013 à 05:18:15

C'est vrai, je n'y pensais pkus. En pratique personne ne fait des mutex fifo parceque ca coute trop cher.

john-lock
john-lock
Niveau 6
09 octobre 2013 à 11:20:31

Je viens d'en parler à mon prof, il m'a dit qu'on ne peut savoir si un mutex est FIFO. Il m'a conseillé d'utiliser un sémaphore plutôt.

Mais je ne comprend pas très bien car pour moi un sémaphore si je le place au même endroit dans le code se comportera comme un mutex. La différence entre un sémaphore binaire et un mutex vient que pour le mutex seul le thread qui est possession du mutex peut le relâcher.

Donc du coup je suis un peu perdu là.

Schiffer
Schiffer
Niveau 10
09 octobre 2013 à 13:40:05

Je vais peut-être dire une bêtise mais pourquoi ne pas faire un affichage à la fin du traitement dans la fonction thread qui va indiquer que le thread n°x a fini sont boulot?

fonction thread(
le thread fait son job
print thread n°x finished
exit_thread
)

Schiffer
Schiffer
Niveau 10
09 octobre 2013 à 13:40:51

son boulot*

john-lock
john-lock
Niveau 6
09 octobre 2013 à 17:41:56

Malheureusement non :-( j'ai besoin d'utiliser cette liste après.

kufa
kufa
Niveau 9
09 octobre 2013 à 21:44:05

Quelle platforme?
Perso je ferai sans mutex, avec in interlockedincrement.
Par exemple http://pastebin.com/A6pYvKxF
(j'ai pas fait de tests d'erreurs, mais ca donne une idee)

/k

john-lock
john-lock
Niveau 6
10 octobre 2013 à 16:42:36

Sur Linux,

Ok merci je vais regardé comment un interlockedincremet marche .

Par contre, ne l'ayant pas vu durant le cours je pense qu'il faut mieux que je me rabatte sur une autre solution.

godrik
godrik
Niveau 30
10 octobre 2013 à 17:58:40

kufa, j'ai l'impression que ca se repose sur une instruction atomic comme un fetch_and_add, et je ne suis pas convaincu que ca soit FIFO comme operation. ?

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment