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 :
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);
}
Quelqu'un pourrait-il m'aider à établir un pseudo algo d'une solution qui marche ?

Merci d'avance.