Bonjour,
J'ai un pb tout bête que je n'arrive pas à résoudre surement par manque de compréhension sur la synchronisation et le "scheduling" des threads.
J'ai un programme principal qui écrit des données dans n fichiers. Ce même programme lance au début n threads qui lise chacun un fichier.
Mon problème est que quand un thread lit un fichier, il semble occuper tout le temps processeur et ne permet pas aux autres thread de s’exécuter en parallèle.
Pourtant, chaque thread lit un fichier par bloc de 10 lignes avec un sleep après le traitement.
Je pense que le problème vient du sleep qui ne libère pas correctement le temps de processeur pour un autre thread. J'ai essayé avec sched_yield mais pas plus de succès. J'ai essayé de décaler le lancement de chaque thread, pas plus de succès.
Je pense qu'il faudrait que j'utilise des sémaphores, mais j'ai du mal à comprendre comment ça fonctionne.
Voici un pseudo code de ce qui est actuellement fait :
Quelqu'un pourrait-il m'aider à établir un pseudo algo d'une solution qui marche ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Main(){ Lancement de N Threads Pour chaque fichier lock_fichier Ecriture des données. unlock_fichier Fin Pour } Thread{ do{ lock_fichier lecture de 10 lignes unlock_fichier Traitement des 10 lignes sleep(5); }while (end); }
Merci d'avance.
Partager