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] Petit problème sur mes threads

32BansLater
32BansLater
Niveau 7
30 novembre 2022 à 23:02:41

Salut à tous ceux qui prendront le temps de lire le topic https://image.noelshack.com/fichiers/2018/26/7/1530476579-reupjesus.png

Pour un projet étudiant, j'ai une tâche qui consiste à faire un producteur-consommateur sur base des deux inputs qui me donneront le nombre de producteurs et consommateur. Ils doivent produire / consommer 8192 élements au total.

Seulement comme vous le savez , qui dit Threads , dit Race condition , Data condition et toutes la panoplie https://image.noelshack.com/fichiers/2018/29/6/1532128784-risitas33.png

J'ai mit le code sur pastebin parce que je ne sais pour quel raison lorsque je le met dans les balises code,
il me fait un gros one line dégueulasse https://image.noelshack.com/fichiers/2018/10/1/1520256134-risitasue2.png

https://pastebin.com/AqpLQAgU

Merci pour votre aide https://image.noelshack.com/fichiers/2016/38/1474490235-risitas434.png

Message édité le 30 novembre 2022 à 23:03:16 par 32BansLater
godrik
godrik
Niveau 30
01 décembre 2022 à 00:59:49

Et le problème est?

32BansLater
32BansLater
Niveau 7
01 décembre 2022 à 10:27:19

Le 01 décembre 2022 à 00:59:49 :
Et le problème est?

J'ai un deadlock quand j'arrive au 8191 ième constamment. ça arrive moins souvent dans les cas où le nbre de consommateurs et de producteurs est égale.
Casiment systématiquement dans les cas où les producteurs et consommateurs sont inégaux exemple :
1 producteurs 3 consommateurs

Impaloupa
Impaloupa
Niveau 11
01 décembre 2022 à 13:26:21

C'est tout à fait normal. Tu te focalises sur le nombre d'éléments à produire et à consommer mais tu prends pas en compte le cycle de vie de tes threads.

Imaginons un cas simple: 2 consumers et 1 producer: tu peux arriver facilement à un deadlock provoqué par le semaphore sur le traitement des derniers éléments à consommer :

/* DERNIER ROUND */
Producer 0 waits semaphore
Producer 0 waits mutex
Producer 0 produces item n° 8192
Producer 0 released mutex
Consumer 2 waits semaphore
Consumer 1 waits mutex

Consumer 1 consumes item n° 8192
Consumer 1 released mutex
/* AH... PLUS DE PRODUCER POUR LIBÉRER CONSUMER 2? :( */

Dans le passage en gras, il ne reste qu'un élément à consommer, mais les deux threads étaient prêts à consommer un élément. L'ordonnanceur a privilégié le thread du consumer 1, il consomme tranquillement le dernier item pendant que son pote "Consumer 2" reste bloqué sur le semaphore qui ne sera jamais libéré.

Il te manque une gestion de fin de cycle pour que tes threads ne restent pas là à attendre en espérant avoir quelque chose à consommer alors que le bar est fermé :o)) !

Je te conseille de mettre plus de logs quand tu travailles sur ce genre d'exercices de programmation concurrente. Ca te permet de comprendre qui est bloqué, où et pourquoi. Limite le nombre de threads pour éviter les casse-têtes!

A+

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