Areva
Batterie d’algorithmes et outils de synchronisation : 2 catégories
(Masquer les interruptions -> plus de concurrence -> plus de pbms !)
Attente active : quelque chose qui représente la condition, plus un algorithme qui met en place le test et l’attente (semi-)active (« spinlock », « verrou tournant »)
Des variables partagées (« solution purement logicielle ») pour exprimer la condition Solutions impliquant le matériel : instruction assembleur: Test-and-set Instruction assembleur: swap
Attente passive (plus haut niveau d’abstraction) :
Sémaphore (IPC Unix semop, Java 1.5+ ) Moniteur avec variable(s) conditionnelle(s) (Concurrent Pascal, Java) Verrou conditionnel cad mutex+var. condition (POSIX pthread, Java 1.5+ )
2
1
Outil de synchronisation Sémaphore (Dyjsktra 1965)
Structure de données et des méthodes
Entier File d’attente de processus/threads Opérations pour
Initialiser l’entier : nombre de jetons Prendre un “jeton”, ou s’endormir si pas de disponible : P(sem) Réveiller un processus qui attend le jeton, en le lui passant, sinon, le deposer : V(sem)
Outil général, comme moniteur, pour le problème de l’exclusion mutuelle : 1 jeton initial Exclusion mutuelle sur N exemplaires équivalents d’une même ressource : N jetons N’importe quelle forme de synchronisation conditionnelle : en jouant sur la valeur du jeton et sur les appels P ou V
3
Détail des opérations sur sémaphore : une variante possible structure de données :
Val : entier File : file de (contexte de) processus ou threads Opération Init(s:semaphore, int init) Opé Init(s:semaphore, init) s.Val = init ; creer s.File, vide s.File,
Opération P(s:semaphore) Opé P(s:semaphore) Si (s.Val FIFO order in the queue public void release() // Releases a permit, returning it to the semaphore. public boolean tryAcquire() // Acquires a permit from this semaphore, only if one is available at the time of invocation. … }