IFT-2001 / Automne 2026 / Threads
Entraînement — Threads
Exercices d’entraînement créés pour le portail. Aucun questionnaire officiel. Banque v1.
19 questions. Un point par réponse automatique correcte; aucun crédit partiel. Les autoévaluations sont comptées séparément.
Aucune tentative commencée.
1. Quelle association décrit correctement un processus multithread?
Compréhension · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 1
Le processus regroupe mémoire et ressources; le TCB décrit le flot individuel, notamment registres, compteur ordinal, pile et état. Les threads du même processus ne disposent pas d’espaces d’adressage isolés.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 2.1 Le processus comme conteneurRevoir la matière — 2.2 Le thread comme flot d’exécution2. Quel ensemble est propre à chaque thread, tout en restant dans le même espace d’adressage?
Compréhension · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 2
Chaque thread a son contexte d’exécution. Code, globales/statiques, tas et fichiers ouverts sont communs au processus. Une pile propre n’est pas une frontière de protection : une adresse de cette pile peut être transmise à un autre thread, avec une durée de vie et une synchronisation à respecter.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 2.2 Le thread comme flot d’exécution3. Un seul cœur entrelace deux tâches. Un autre programme applique le même filtre à quatre quarts indépendants d’une image sur quatre cœurs. Comment les classer?
Application · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 3
Concurrence décrit la progression sur une période commune; un cœur peut entrelacer les activités. Le filtrage identique de partitions indépendantes sur plusieurs cœurs est un parallélisme de données. Des traitements différents correspondraient à un parallélisme de tâches.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 3.2 Concurrence et parallélisme4. Quelle lecture de pthread_create(&tid, NULL, travail, arg) et de son résultat est correcte?
Compréhension · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 4
Les quatre paramètres sont l’adresse de l’identifiant à remplir, les attributs, la routine void *(*)(void *) et son argument. Le code de retour signale le succès (0) ou une erreur; vérifier ce code avant d’utiliser tid. Le démarrage du travailleur n’attend pas le join.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 4.1 Contrat de `pthread_create`5. Une boucle lance trois threads avec &i puis incrémente i. Propose une transmission correcte des numéros 0, 1 et 2 et justifie la durée de vie des objets.
Application · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 5
Un tableau d’arguments distincts, initialisés avant chaque création et conservés jusqu’après les jointures, évite la réutilisation de la même variable. Chaque travailleur lit son élément. Le simple passage d’un pointeur ne copie pas l’objet pointé. La réponse reste autoévaluée par comparaison à la rubrique.
- Préparer un élément distinct par travailleur, par exemple args[3], et transmettre &args[i].
- Initialiser chaque élément avant sa création; ne pas le modifier concurremment pendant sa lecture.
- Conserver le tableau vivant jusqu’à la fin des lectures, par exemple dans le créateur qui joint tous les travailleurs avant de quitter.
- Expliquer que &i réutilise un objet mutable commun; ni un sleep ni une observation favorable ne garantit les valeurs.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 4.2 Arguments stables6. Quelle affirmation distingue correctement sortie, détachement, sommeil et jointure?
Compréhension · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 6
La terminaison d’un travailleur ne termine pas les autres. Le détachement libère automatiquement ses ressources de terminaison et exclut la jointure. Un délai ne crée pas de dépendance de fin. Quitter le processus, notamment par retour de main ou exit, termine en revanche ses threads.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 5.1 `pthread_join`Revoir la matière — 4.3 Attributs et terminaison7. A et B sont créés, puis joints tous les deux avant de créer C. Chaque travailleur émet une lettre juste avant de terminer. Énumère les traces possibles et les garanties.
Application · version 1
Hypothèses et règle de réponse
- Créations et jointures réussies; trois travailleurs joignables distincts.
- Une lettre indivisible par travailleur, immédiatement observable sans tampon; aucune autre sortie ni signal.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 7
Les deux fins A et B précèdent la création de C; les lettres possibles sont ABC et BAC dans ce modèle. Joindre A avant B ne force pas A à finir en premier : B peut déjà être terminé lors de sa jointure. La rubrique juge les relations de précédence, sans prétendre corriger automatiquement le texte.
- A et B peuvent démarrer et finir dans des ordres différents; ordre des create ne fixe pas celui des fins.
- C commence après les deux terminaisons, car ses créations sont précédées des deux jointures réussies.
- Les traces des trois lettres sont ABC et BAC, sans ordre imposé entre A et B.
- Remplacer les jointures par sleep ne garantit plus cette précédence; aucun code universitaire exécuté.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 5.3 Lire une trace correctement8. Deux tâches indépendantes durent 4 s chacune. Que donne créer A, joindre A, créer B, joindre B?
Application · version 1
Hypothèses et règle de réponse
- Deux cœurs disponibles; tâches CPU indépendantes, même durée de 4 s; coûts de création/jointure/commutation nuls.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 8
B ne peut être créé qu’après la fin de A : 4+4=8 s. Créer les deux avant de les joindre permettrait 4 s dans le modèle idéal annoncé. Le nombre de threads ou de cœurs ne rétablit pas une concurrence supprimée par le programme.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 5.2 Préserver ou détruire la concurrence9. Quelle comparaison des modèles est correcte?
Compréhension · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 9
Dans M:1, une seule entité noyau limite le parallélisme interne et un appel bloquant peut immobiliser le groupe. 1:1 permet des blocages indépendants et le multicœur au coût de ressources noyau. M:N et deux niveaux sont des correspondances, sans nombre fixe de travailleurs ni ordre global garanti.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 6.3 CorrespondancesRevoir la matière — 6.1 Gestion en espace utilisateurRevoir la matière — 6.2 Gestion par le noyau10. Un pool de trois travailleurs reçoit dix tâches longues simultanément. Quel énoncé correspond à son rôle?
Application · version 1
Hypothèses et règle de réponse
- Trois travailleurs disponibles au départ; aucune tâche n’est terminée au moment de la répartition; file sans limite atteinte.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 10
Le pool sépare file de tâches et travailleurs réutilisés. Après affectation initiale, trois tâches occupent les travailleurs et sept restent en file. Leur durée et les ressources limitent le gain; agrandir sans mesure peut accroître contention, piles et changements de contexte.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 7.2 Pools de threads11. Une boucle calcule a[i] à partir du nouveau a[i-1]. Une directive OpenMP parallel suffit-elle à la rendre correcte?
Application · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 11
L’itération suivante dépend de la valeur produite par la précédente. Une directive ne change pas cette relation. Il faut préserver les dépendances ou transformer l’algorithme correctement; le nombre de threads ne remplace pas ce raisonnement.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 7.3 OpenMP12. Quelle proposition distingue sûreté concurrente et réentrance?
Compréhension · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 12
La garantie thread-safe dépend du contrat d’usage et des objets partagés. Un mutex interne peut éviter une course entre threads mais poser problème lors d’une réentrée par signal. Une locale static persiste et est commune aux appels; un objet externe peut encore être partagé incorrectement même sans globale.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 8.1 Fonction *thread-safe* et fonction réentrante13. A et B lisent tous deux N=7 avant d’insérer leur document. B écrit en case 7 et avance N, puis A utilise sa copie 7. Quel diagnostic est correct?
Application · version 1
Hypothèses et règle de réponse
- Modèle pédagogique d’opérations indivisibles du spouleur, sans exclusion; ne décrit pas une garantie du langage C en présence de data race.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 13
La réservation de case doit préserver un invariant sur les trois étapes. Protéger seulement l’incrément n’annule pas les deux choix de la même case. Les joins après créations attendent les fins sans protéger les mises à jour. Les bornes du compteur sont pédagogiques : des accès C ordinaires en course peuvent être indéfinis.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 8.3 Exemple du spouleurRevoir la matière — 8.4 Exemple du compteur14. Deux threads modifient une globale C ordinaire puis sont joints. Peut-on garantir le résultat attendu ou un intervalle numérique?
Application · version 1
Hypothèses et règle de réponse
- Accès concurrents incompatibles non atomiques, sans mutex ni autre synchronisation des mises à jour; les joins sont après les créations.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 14
Join ne sérialise pas rétroactivement les opérations des travailleurs. Le modèle lecture/calcul/écriture montre une perte possible de mises à jour, mais ses bornes ne sont pas un contrat C. La précision ED15 et le prolongement S06 distinguent illustration pédagogique et comportement indéfini.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 8.4 Exemple du compteur15. Avec 85 % de travail parallélisable et quatre unités de calcul, quelle accélération idéale donne Amdahl? Arrondir à deux décimales.
Application · version 1
Hypothèses et règle de réponse
- Taille de problème fixe; fraction P=0,85 du temps séquentiel; partage parfait sur N=4; aucun surcoût.
Point ou virgule décimale; arrondi à deux décimales, tolérance absolue 0,005. Fraction et unités restent celles annoncées; aucun calcul de code saisi.
Corrigé — question 15
Sur une référence de 100 s : 15 s séquentielles + 85/4=21,25 s parallèles, soit 36,25 s. L’accélération vaut 100/36,25=80/29≈2,75862069, arrondie à 2,76. Ce gain théorique est inférieur à quatre et ne constitue pas une mesure réelle.
Variantes : Point ou virgule décimale; arrondi à deux décimales, tolérance absolue 0,005. Fraction et unités restent celles annoncées; aucun calcul de code saisi.
Revoir la matière — 9. Performance et loi d’Amdahl16. Explique ce qu’il faut distinguer dans les activités fork/pthread et dans la chaîne mycall historique, sans prétendre les avoir exécutées.
Application · version 1
Hypothèses et règle de réponse
- Modèle et API décrits par le maître S04; aucune commande, compilation ou manipulation VM attestée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 16
Les exemples comparent identité, mémoire et précédences; la chaîne mycall relie utilisateur et noyau effectivement chargé. Une compilation seule ne prouve ni l’amorçage du bon noyau ni le succès du test. Les numéros du laboratoire sont liés à sa version. La rubrique évalue uniquement une explication, pas la réalisation des manipulations.
- Pour fork, distinguer retour père/fils, vrais PID, mémoire séparée et ordre partiel de wait; une faute mémoire ne fixe pas un ordre.
- Pour pthread, identifier create/join/exit et expliquer les ordres variables ou la fin précoce du processus sans joins.
- Relier numéro/table, prototype/implantation, compilation/intégration, noyau réellement chargé et test syscall; uname contrôle le noyau chargé.
- Garder 337/299, Ubuntu 10.04/Linux 2.6.32.24 comme historiques; VM restaurable et ancien noyau; aucune compilation, modification ou observation personnelle attestée.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 10.2 `fork`, attente et faute mémoireRevoir la matière — 10.3 Exemples `pthread`Revoir la matière — 11.1 Chaîne complèteRevoir la matière — 11.2 Modifications décritesRevoir la matière — 11.3 Compilation, installation et vérificationRevoir la matière — 11.4 Risque et récupération17. Entrée : error 4, info, error 4, error 5, error 4. Après grep error puis uniq, quelle sortie et quel sens du statut Bash?
Application · version 1
Hypothèses et règle de réponse
- Chaque élément représente une ligne; grep conserve les lignes contenant error; uniq retire uniquement les répétitions adjacentes; aucune commande exécutée.
Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Corrigé — question 17
Le filtrage rapproche les deux premières lignes error 4, qui sont dédupliquées. La dernière est séparée par error 5 et demeure. $? décrit la commande précédente, 0 au succès. Pour le TSV, garder une taille comme clé jusqu’au tri numérique puis retirer la colonne évite un tri sur les seuls noms; la composition ne prouve aucune exécution.
Variantes : Les hypothèses fixent le problème. Une reformulation équivalente suit la rubrique pour les réponses rédigées, qui restent autoévaluées. Les traces observées ne fixent pas l’ordre général.
Revoir la matière — 12.2 Exercices 9 à 12 : filtres et compositionRevoir la matière — 12.4 Exercices 13 et 14 : fichiers et tableauxRevoir la matière — 12.5 Script Bash et code de retour18. Même problème : 85 % parallélisable, huit unités, sans surcoût. Quelle accélération idéale? Arrondir à deux décimales.
Application · version 1
Hypothèses et règle de réponse
- Problème fixe; temps de référence 100 s; 15 s séquentielles; 85 s réparties parfaitement entre N=8.
Point ou virgule décimale; arrondi à deux décimales, tolérance absolue 0,005. Fraction et unités restent celles annoncées; aucun calcul de code saisi.
Corrigé — question 18
Le temps idéal est 15+85/8=25,625 s. 100/25,625=160/41≈3,90243902, donc 3,90. Doubler quatre vers huit unités ne double pas l’accélération : la fraction séquentielle reste 15 s.
Variantes : Point ou virgule décimale; arrondi à deux décimales, tolérance absolue 0,005. Fraction et unités restent celles annoncées; aucun calcul de code saisi.
Revoir la matière — 9. Performance et loi d’Amdahl19. Avec P=0,85, quelle borne d’accélération idéale quand le nombre d’unités tend vers l’infini? Arrondir à deux décimales.
Application · version 1
Hypothèses et règle de réponse
- Problème fixe; 15 % intrinsèquement séquentiel; aucun surcoût; il s’agit d’une limite théorique, pas d’un gain mesuré.
Point ou virgule décimale; arrondi à deux décimales, tolérance absolue 0,005. Fraction et unités restent celles annoncées; aucun calcul de code saisi.
Corrigé — question 19
La partie parallèle tend vers zéro mais les 15 % séquentiels persistent. La limite est 1/0,15=20/3≈6,66666667, soit 6,67. Les coûts de création, synchronisation, déséquilibre, caches et mémoire peuvent encore réduire le gain réel.
Variantes : Point ou virgule décimale; arrondi à deux décimales, tolérance absolue 0,005. Fraction et unités restent celles annoncées; aucun calcul de code saisi.
Revoir la matière — 9. Performance et loi d’AmdahlRécupérer manuellement les données locales
Copier séparément les données ci-dessous dans des fichiers texte avant de fermer la page ou de modifier le stockage. Une valeur illisible ou incompatible reste en place. Aucun effacement ni rétablissement écrasant n’est effectué automatiquement. L’export/import JSON est disponible sur la page Progression du cours. Cette récupération séparée reste utile pour une valeur brute ou un conflit.
Clé de ce cours : . Format v1 porté par cette clé; dates UTC et identifiants durables.
Si l’accès est refusé, la valeur persistée peut rester inaccessible. Réautoriser le stockage dans le navigateur puis rouvrir ce cours permet de la relire. Une réinitialisation exige une décision explicite après récupération; aucune commande de suppression n’est proposée ici. Les données restent sur cette origine et cet appareil, sans transfert automatique.