Dans le problème lecteurs-écrivains, combien de lecteurs peuvent accéder simultanément à la donnée ?
Plusieurs lecteurs.
Dans le problème lecteurs-écrivains, quand un écrivain peut-il accéder à la donnée ?
Seul, sans lecteur ni autre écrivain.
Avec la priorité aux lecteurs, à quelle condition un écrivain accède-t-il à la donnée ?
Lorsqu’aucun lecteur n’est en train de lire.
Sans protection, quel effet peuvent avoir nbrl++ et le test if (nbrl == 1) ?
Ils peuvent fausser le compte des lecteurs, car ils ne sont pas atomiques.
Quelle variable Smut protège-t-il dans la solution du problème lecteurs-écrivains ?
La variable nbrl.
Quel accès Se, initialisé à 1, empêche-t-il pendant la lecture collective ?
L’accès des écrivains à la donnée.
Dans la solution lecteurs-écrivains, que fait le premier lecteur lorsque nbrl passe à 1 ?
Il prend Se au nom du groupe.
Comment aborde-t-on un problème de synchronisation par sémaphores ?
On le ramène aux cas typiques connus.
Que repère-t-on pour résoudre un problème de synchronisation par sémaphores ?
L’endroit où attendre.
Comment associe-t-on les sémaphores aux attentes et aux variables critiques annexes ?
Un sémaphore par attente unique, avec protection des variables critiques annexes.
À quoi sert principalement une condition POSIX ?
À attendre un événement.
À quels usages un sémaphore peut-il servir en plus de l’attente d’événement ?
À l’exclusion mutuelle ou au comptage de ressources.
Que fait pthread_cond_wait ?
Il attend sur une condition.
Que fait pthread_cond_signal ?
Il réveille un thread en attente.
Que fait pthread_cond_broadcast ?
Il réveille tous les threads en attente.
Quand survient un réveil perdu sur une condition ?
Lorsqu’un signal est émis sans thread en attente et n’est pas mémorisé.
Quand survient un réveil trompeur sur une condition ?
Lorsque la condition justifiant le réveil a cessé d’être vraie à la reprise du thread.
Que fait `pthread_cond_wait` au mutex associé pendant l’attente et avant de rendre la main ?
Il le libère atomiquement, puis le reverrouille automatiquement avant de rendre la main.
Dans quelle structure faut-il tester la condition autour de `pthread_cond_wait` ?
Dans une boucle `while`.
Pourquoi faut-il retester la condition après le réveil de `pthread_cond_wait` ?
Parce que la condition doit être vérifiée de nouveau après le réveil.
Comment exprimer l’événement à attendre dans une attente POSIX correcte ?
Par une assertion.
Où faut-il tester l’assertion de l’événement attendu ?
Dans une section critique, au sein d’une boucle.
Que faut-il vérifier en sortant de la boucle d’attente de l’événement ?
Que l’assertion est satisfaite.
Quel mécanisme assure l’exclusion mutuelle entre threads ?
Le mutex.
Quel mécanisme permet l’attente d’événement entre threads ?
La condition.
Quel mécanisme peut assurer les deux fonctions entre processus ?
Un sémaphore.
Que fait le système pendant une attente passive ?
Il met l’activité en pause.
Comment l’attente active vérifie-t-elle une condition ?
En boucle sur le processeur.
Pourquoi l’attente active est-elle généralement à éviter ?
Elle mobilise le processeur pour vérifier une condition en boucle.
Dans quelles situations l’attente active peut-elle être légitime ?
Sans support d’attente passive, avec beaucoup de processeurs ou pour des sections critiques très courtes et fréquentes.
Qu’est-ce qu’un interblocage ?
Une situation où une ou plusieurs entités d’exécution sont bloquées et ne peuvent pas se débloquer elles-mêmes.
Quand A détient r1 et B détient r2, quelle attente mutuelle crée un interblocage ?
A attend r2 et B attend r1.
Quelles conditions réunies caractérisent un interblocage selon Coffman, Elphick et Shoshani (1971) ?
L’exclusion mutuelle, la conservation et attente, l’absence de réquisition et l’attente circulaire.
Qu’est-ce qu’un graphe d’allocation de ressources ?
Un graphe orienté représentant les processus, les ressources, leurs allocations et leurs attentes.
Que signifie un arc dans un graphe d’allocation ?
Un exemplaire de est alloué à .
Que signifie un arc dans un graphe d’allocation ?
attend un exemplaire de .
Que garantit un interblocage dans un graphe d’allocation ?
La présence d’un cycle.
Pourquoi un cycle ne garantit-il pas toujours un interblocage ?
Les ressources peuvent avoir plusieurs exemplaires.
Que provoque un cycle si chaque ressource concernée n’a qu’un exemplaire ?
Un interblocage.
Dans l’exemple de struct timespec, quel problème peut survenir en lisant tv_sec avant une modification et tv_nsec après ?
Un mélange incohérent des anciennes et nouvelles valeurs.
Que fait l’opération V sur un sémaphore ?
Elle incrémente un compteur persistant.
Quel type représente une condition POSIX et quelle constante permet de l’initialiser statiquement ?
`pthread_cond_t`, initialisable avec `PTHREAD_COND_INITIALIZER`.
Pourquoi l’API POSIX ne fournit-elle pas de fonction `pthread_cond_trywait` ?
Une condition POSIX sert à attendre un événement, pas à tenter d’obtenir une ressource sans bloquer.
Quel mécanisme assure l’exclusion mutuelle lors de la synchronisation des signaux ?
Le masquage.
Quel mécanisme permet l’attente d’événement lors de la synchronisation des signaux ?
sigsuspend.
Que peut provoquer l’ajout de sleep à une boucle de vérification ?
Un retard de réaction à l’événement pouvant atteindre une seconde dans l’exemple du cours.
Que devient une boucle active lorsqu’on lui ajoute sleep ?
Elle reste une attente active.
Quelle fonction parmi pthread_cond_broadcast, pthread_spin_lock, sem_trywait et sleep reste légitime dans certains usages ?
pthread_cond_broadcast.
Quelles fonctions sont à éviter par défaut : pthread_cond_broadcast, pthread_spin_lock, sem_trywait et sleep ?
pthread_spin_lock, sem_trywait et sleep.
Comment un processus peut-il s’interbloquer avec deux appels à P(r1) ?
En appelant deux fois P(r1) sur le même sémaphore binaire sans appeler V(r1) entre les deux.
Quand un mutex et une barrière peuvent-ils provoquer un interblocage ?
Quand A détient le mutex en attendant la barrière et que B attend ce mutex pour atteindre la barrière.
Avec quels mécanismes l’interblocage peut-il survenir ?
Avec tout mécanisme provoquant une attente conditionnelle.
Quels exemples de mécanismes à attente conditionnelle peuvent provoquer un interblocage ?
Les sémaphores, les mutex, les barrières et les conditions.
Quelles primitives du cours empêchent la réquisition forcée d’une ressource acquise ?
P/V, pthread_mutex_lock et pthread_cond_wait.
Comment P3 peut-il débloquer P1 dans l’exemple avec plusieurs exemplaires de R2 ?
P3 libère un autre exemplaire de R2.
Teste tes connaissances avec un QCM de 23 questions sur Synchronisation et interblocages.
1. Dans les primitives P/V ou les mutex étudiés, que signifie l’absence de réquisition ?
2. Dans un graphe d’allocation de ressources, que signifie un arc R → P ?
Révisez le cours complet dans la fiche de révision de Synchronisation et interblocages.
Voir la fiche →Importe ton cours et l'IA génère des flashcards en 30 secondes.
Générateur de flashcards