Cours : programmation concurrente
La vie est ainsi faite, qu'il faut avoir plusieurs cordes à son arc. C'est pour cela que ce cours aborde la synchronisation entre processus thread d'un point de vue théorique à l'aide de la logique temporelle et de l'outil LTSA, d'un point de vue pratique en Java ou C/C++ (si vous suivez le lien indiqué pour chaque langage, vous verrez son taux de popularité. Nous aurions aussi put aborder la synchronisation dans les langages C# (cf. cours .Net) ou Objective-C remis au gout du jour grâce à l'iPhone/iPad (comparatif complet).
Si vous connaissez les principes du cours, il ne vous sera pas difficile de proposer des schémas de synchronisation dans les langages que vous aurez à utiliser au cours de votre carrière. L'examen peut proposer des exercices de synchronisation pour des langages non vus en cours. A vous de vous adapter.
Le programme semaine par semaine
- Programmation parallèle et concurrente - Introduction
- Cours :
M. Riveill
(transparents)
- Quels sont les problèmes et pourquoi a-t-on besoin d'autres outils (séquence, alternative).
- Modélisation de processus séquentiel en FSP sans composition
- TD1 :
M. Riveill - semaine 6
(correction)
- FSP : un langage pour décrire des processus - Modélisation de problèmes séquentiels
- Java : programmation des threads
- Correction
- Processuss parallèle et concurrent
- Cours :
M. Riveill
-
semaine 7
(transparents)
- Modélisation de processus parallèle en FSP (composition parallèle, renomage)
- TD2 : M. Riveill
(correction)
- FSP : un langage pour décrire des processus parallèles - Modélisation de problèmes parallèles et concurrents
- Java : attente active, 'synchronized'
- Correction
- Accès aux ressources partagées, les bonnes pratiques
- Cours
:
M. Riveill
- semaine 8 (transparents)
- TD3 :
M. Riveill
(correction - transparents)
- FSP : un langage pour prouver des programmes parallèle
- le jardin
- lecteur-rédacteur (écriture d'un contrôleur simple, sans les preuves)
- Java : wait / signal
- Les principaux outils de la synchronisation
- Cours :
M. Riveill
- semaine 10
(transparents)
- Verrou
- Moniteur
- Sémaphore
- TD4 : M. Riveill
(correction)
- Java : Le parking. Mise en oeuvre à l'aide de Moniteur, Sémaphore et Verrou
- Les maux de la programmation concurrente
- Cours
:
M. Riveill
- semaine 11
(transparents)
- propriété de sûreté (interblocage, état d'erreur), propriété de vivacité (absence de famine)
- TD5 : M. Riveill
(correction)
- FSP : Les philosophes
- Java : Les philosophes
- Les maux de la programmation concurrente
(suite)
- Cours :
M. Riveill - Semaine 12
(transparents - applet la voie unique)
- Propriétés de sûreté et de vivacité
- TD6 : M. Riveill (correction)
- On révise
- FSP : les lecteurs rédacteurs (preuve de la correction et vérification de l'absence de famine)
- Java : les lecteurs rédacteurs (programmation d'un moniteur)
- Les threads posix
- La synchronisation par sémaphore
- Cours
: Dino
(transparents)
- IPC système V : sémaphore et mémoire partagée
- TD8 : Dino
- Semaine 14
- suite du projet en Posix --> travail à rendre en semaine 15 (2 heures de travail max en plus des séances de TD)
- La synchronisation par sémaphore
- Pas de cours
- TD9 : Dino
- Semaine 15
- En l'absence de mémoire commune
- Pas de cours
- TD10 : Dino -
Semaine 17
- suite du projet Unix système V --> travail à rendre en semaine 18 (4 heures de travail max en plus des séances de TD)
- En l'absence de mémoire commune
- Cours : M. Riveill
- Ordre, temps et état dans les systèmes répartis (transparents)
- TD11 : M. Riveill
- En l'absence de mémoire commune
- Cours : Dino
- Ordre, temps et état dans les systèmes répartis (transparents)
- TD12 : Dino
- suite du projet serveur de chat --> travail à rendre à la fin de la séance
- Pour aller plus loin :
- La synchronisation en C# (C# programming guide), Objective-C (tutoriel Apple),