Les Threads. Sommaire. 1 Les Threads

Dimension: px
Commencer à balayer dès la page:

Download "Les Threads. Sommaire. 1 Les Threads"

Transcription

1 1 Les Threads Les Threads Sommaire Les Threads Introduction Les Threads : Notions de base Créer un Thread avec une méthode non paramétrée Les threads à méthode paramétrée Gérer les arrêts des threads Contexte d'exécution des threads Gestion Multithread Première solution : La classe Interlocked Seconde solution : Verrouillage de bloc de code Verrouillage avancé : La classe Monitor Autres types de verrouillage La classe ReaderWriterLock La classe WaitHandle Une erreur fréquente de Multithreading : Les Deadlocks Les modèles de programmation asynchrone Modèles de programmation "Rendezvous" Le modèle Wait Until Done Le modèle Polling Le modèle Callback L'APM et les exceptions Premier outil des APM : La classe ThreadPool Utilisation standard du pooling de threads ThreadPool et WaitHandle Un autre outil des APM : La classe SynchronizationContext La classe Timer Conclusion... 53

2 2 Les Threads 1 Introduction Jusqu'ici, toutes les opérations étaient effectuées sur un seul processus : Celui de notre application. Ce type de programmation est très limité. En effet, si nous lançons une tâche lourde (comme le traitement d'une vidéo ou le rendu d'une image par exemple), nous ne pouvons rien faire d'autre qu'attendre que le processus soit terminé. Les Threads sont devenus indispensables aux développeurs souhaitant développer des applications performantes ; et cela est d'autant plus vrai depuis l avènement des processeurs multicœurs sur les machines. Ils permettent d effectuer des actions en parallèles dans une machine afin d en accélérer le traitement. Dans ce chapitre, nous allons voir comment le.net Framework nous permet de créer des processus (ou Thread) en plus du processus principal. Nous verrons également quels sont les moyens de gestion des threads puis nous verrons le concept d'application asynchrone. Tous les outils de gestion des processus se trouvent dans l'espace de nom System.Threading.

3 3 Les Threads 2 Les Threads : Notions de base La classe Thread nous permet de créer simplement un objet qui va exécuter le contenu d'une méthode. Les tableaux ci dessous en récapitulent les principaux membres et présentent également quelques énumérations utilisables avec cette classe : Membres d'instances Propriétés Description IsAlive Indique si le thread est en cours d exécution ou non. IsBackground Permet de savoir ou d indiquer si un thread tourne en arrière plan. IsThreadPoolThread Indique si le thread est dans le pool de threads. ManagedThreadId Retourne un nombre permettant d identifier le thread. Name Permet de connaitre ou d indiquer le nom du thread. Priority Permet de connaitre ou d indiquer une valeur de l énumération ThreadPriority indiquant la priorité du thread. ThreadState Retourne une des valeurs de l énumération ThreadState reflétant l état du thread. Méthodes Abort Interrupt Join Start Description Arrête l exécution du thread et lève une exception ThreadAbortException. Arrête l'exécution d'un thread dont l'état est WaitSleepJoin. Lève une exception ThreadInterruptedException. Bloque le thread appelant jusqu à ce que le thread ciblé se termine. Lance l'exécution d'un thread Membres statiques Propriétés Statiques Description CurrentContext Retourne un objet ThreadContext basé sur le thread courant. CurrentPrincipal Permet de connaitre ou d indiquer l utilisateur associé au thread courant. CurrentThread Retourne le thread en cours d exécution.

4 4 Les Threads Méthodes Statiques BeginCriticalRegion EndCriticalRegion GetDomain GetDomainID ResetAbort Sleep SpinWait VolatileRead VolatileWrite Description Entre ces deux méthodes, vous placez du code pouvant rendre le système instable. L hôte sur lequel est hébergé le thread va décider quoi faire pour ne pas rendre l application instable en cas d interruption du thread. Les régions critiques sont utiles lorsque plusieurs threads partagent des données. Retourne le domaine d'application associé au thread courant. Retourne un numéro d identification du domaine d'application associé au thread courant. Annule une requête d'arrêt pour le thread courant. Bloque le thread pendant un certain moment (en millisecondes). Passe la main aux autres threads. Bloque le thread pour un certain nombre d itérations mais ne passe pas la main aux autres threads. Lit la valeur d un champ dans sa version la plus récente, quelque soit le processeur ayant écrit la valeur. (Environnement Multiprocesseur) Ecrit une valeur dans un champ immédiatement de manière à ce qu elle soit accessible à tous les processeurs. (Environnement Multiprocesseur) Enumération ThreadState Valeur Description Aborted Le thread est interrompu AbortRequested Le thread à reçu une demande d interruption mais l exception ThreadAbortException n a pas encore été levée. Background Le thread tourne en arrière plan. Running Le thread est en cours d exécution Stopped Le thread est arrêté. StopRequested Le thread a reçu une demande d arrêt Unstarted Le thread a été crée mais n a pas encore était démarré. WaitSleepJoin Le thread est bloqué. (Par exemple par la méthode Join) Enumération ThreadPriority Valeur Highest Priorité la plus forte AboveNormal Entre Highest et Normal Normal Priorité par défaut BelowNormal Entre Normal et Lowest Lowest Priorité la moins forte Description

5 5 Les Threads 2.1 Créer un Thread avec une méthode non paramétrée Afin de créer un thread nous avons besoin d une méthode qui sera exécutée par le thread. Elle ne doit rien retourner et ne prendre aucun paramètre. Il nous faut également un délégué qui va se charger d exécuter la méthode au démarrage du thread et un objet thread afin de démarrer le thread: 'VB Public Sub affichage() For i As Integer = 0 To 5 Step 1 Console.WriteLine("Thread n 0 - Etat : 1", Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.ThreadState) Thread.Sleep(1000) Next Sub Main() Dim delegue As ThreadStart = New ThreadStart(AddressOf affichage) Dim monthread As Thread = New Thread(delegue) monthread.start() Console.Read() //C# static void affichage() Console.WriteLine("Thread n 0 - Etat : 1", Thread.CurrentThread.ManagedThreadId,Thread.CurrentThread.ThreadState); static void Main(string[] args) ThreadStart delegue = new ThreadStart(affichage); Thread monthread = new Thread(delegue); monthread.start(); Console.Read(); Thread n 11 Etat : Running Nous avons donc crée la fonction affichage, qui affiche le numéro du thread courant et son état. Ensuite dans la fonction main, nous créons un délégué de type ThreadStart qui pointe sur notre fonction affichage. Enfin nous créons notre thread prenant notre délégué en paramètre. Il nous suffit alors de démarrer le thread pour pouvoir afficher ses informations. Il faut bien comprendre que pendant que notre thread s exécute, nous pouvons effectuer d autres actions dans notre fonction main ; la fonction main étant elle même un processus.

6 6 Les Threads 'VB Public Sub affichage() For i As Integer = 0 To 5 Step 1 Console.WriteLine("Thread n 0 - Etat : 1", Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.ThreadState) Thread.Sleep(1000) Next Public Sub affichage2() Console.WriteLine("Second Thread est exécuté") Thread.Sleep(2000) Console.WriteLine("Second Thread se termine") Sub Main() Dim delegue As ThreadStart = New ThreadStart(AddressOf affichage) Dim monthread As Thread = New Thread(delegue) monthread.start() Dim delegue2 As ThreadStart = New ThreadStart(AddressOf affichage2) Dim monthread2 As Thread = New Thread(delegue2) monthread2.start() Console.Read() //C# static void affichage() for (int i = 0; i < 5; ++i) Console.WriteLine("Thread n 0 - Etat : 1", Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.ThreadState); Thread.Sleep(1000); static void affichage2() Console.WriteLine("Second Thread est exécuté"); Thread.Sleep(2000); Console.WriteLine("Second Thread se termine"); static void Main(string[] args) ThreadStart delegue = new ThreadStart(affichage); Thread monthread = new Thread(delegue); monthread.start(); ThreadStart delegue2 = new ThreadStart(affichage2); Thread monthread2 = new Thread(delegue2); monthread2.start(); Console.Read();

7 7 Les Threads Nous avons donc crée deux threads. Chacun va effectuer un traitement différent, plus ou moins long et simulé par des pauses : Le premier effectue une boucle de cinq itérations où il affiche ses informations et fait une pause d une seconde. Le second affiche qu il débute, fait une pause de deux secondes puis affiche qu il se termine. Thread n 10 Etat : Running Second Thread est exécuté Thread n 10 Etat : Running Thread n 10 Etat : Running Second Thread se termine Thread n 10 Etat : Running Thread n 10 Etat : Running Si on regarde le résultat on voit que le premier thread démarre suivit immédiatement par le second. Puis, deux boucles du premier thread (2 secondes) sont passées et le second thread se termine. Le second thread a donc bien attendu 2 secondes avant de reprendre son déroulement, tout en laissant l autre thread continuer d itérer. Il se peut que dans certains cas vous deviez attendre qu un autre thread termine son traitement avant de continuer. Que ce soit le thread principal de votre fonction Main, ou un autre. Pour cela on utilise la méthode Join. La méthode Join va bloquer le thread dans lequel elle a été appelée, jusqu'à ce que le thread ciblé ait fini son exécution.

8 8 Les Threads Reprenons le code précédent et rajoutons monthread.join() : 'VB Sub Main() Dim delegue As ThreadStart = New ThreadStart(AddressOf affichage) Dim monthread As Thread = New Thread(delegue) monthread.start() monthread.join() Dim delegue2 As ThreadStart = New ThreadStart(AddressOf affichage2) Dim monthread2 As Thread = New Thread(delegue2) monthread2.start() Console.Read() //C# static void Main(string[] args) ThreadStart delegue = new ThreadStart(affichage); Thread monthread = new Thread(delegue); monthread.start(); monthread.join(); ThreadStart delegue2 = new ThreadStart(affichage2); Thread monthread2 = new Thread(delegue2); monthread2.start(); Console.Read(); Thread n 10 Etat : Running Thread n 10 Etat : Running Thread n 10 Etat : Running Thread n 10 Etat : Running Thread n 10 Etat : Running Second Thread est exécuté Second Thread se termine Cette fois ci, nous pouvons remarquer que le premier thread est lancé et stop le processus principal jusqu'à ce qu'il ait finit son exécution. Ainsi, le second thread n'est jamais démarré tant que le premier thread n'a pas réalisé ses 5 itérations.

9 9 Les Threads 2.2 Les threads à méthode paramétrée Les threads que nous avons vus jusqu à présent étaient simples et leurs méthodes exécutées ne comportaient pas de paramètres. Cependant, vous pouvez passer un paramètre à la fonction sur laquelle pointe le délégué. Pour cela, vous devez utiliser un délégué de type ParameterizedThreadStart au lieu de ThreadStart. Une seule contrainte à cela : le paramètre doit être obligatoirement un objet de type Object : 'VB Public Sub affichage3(byval o As Object) Console.WriteLine("0", CType(o, String)) Sub Main() Dim delegue_parametres As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf affichage3) Dim monthread3 As Thread = New Thread(delegue_parametres) monthread3.start("coucou") Console.Read() //C# static void affichage3(object o) Console.WriteLine("0", (string)o); static void Main(string[] args) ParameterizedThreadStart delegue_parametres = new ParameterizedThreadStart(affichage3); Thread monthread3 = new Thread(delegue_parametres); monthread3.start("coucou"); Console.Read(); Coucou

10 10 Les Threads 2.3 Gérer les arrêts des threads Pour arrêter un thread, il faut utiliser la méthode Abort. Celle ci va stopper le processus ciblé et va envoyer une exception ThreadAbortException. Cette exception peut ne pas être gérée par le code, cela n'interrompra pas le programme. Elle est juste levée pour signaler que le thread se termine. 'VB Public Sub maliste(byval o As Object) Dim liste As List(Of String) = CType(o, List(Of String)) For i As Integer = 0 To Step 1 liste.add("test") Next Sub Main() Dim liste As List(Of String) = New List(Of String)() Dim delegue_parametres2 As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf maliste) Dim monthread4 As Thread = New Thread(delegue_parametres2) monthread4.start(liste) Console.WriteLine("0", liste.count) Console.WriteLine("0", liste.count) monthread4.abort() monthread4.join() Console.WriteLine("0", liste.count) //C# static void maliste(object o) List<string> liste = o as List<string>; for (int i = 0; i < ; i++) liste.add("test"); static void Main(string[] args) List<string> liste = new List<string>(); ParameterizedThreadStart delegue_parametres2 = new ParameterizedThreadStart(maListe); Thread monthread4 = new Thread(delegue_parametres2); monthread4.start(liste); Console.WriteLine("0", liste.count); Console.WriteLine("0", liste.count); monthread4.abort(); monthread4.join(); Console.WriteLine("0", liste.count); Console.Read(); Dans ce code, nous chargeons notre thread de rajouter dans une liste dix millions de fois le mot "Test" et nous affichons périodiquement la taille de la liste afin de voir où en est le traitement.

11 11 Les Threads Au final nous utilisons la méthode Join pour que le thread termine proprement son travail. Nous exécutons d abord notre code en mettant en commentaire la ligne monthread4.abort(); : puis, nous dé commentons ensuite la ligne: Comme vous pouvez le voir, le thread a été interrompu en cours de traitement car il n a pas pu terminer la boucle dans laquelle il était. La méthode Join ne sert plus à grand chose. Il faut faire attention à la méthode Abort. En effet, celle ci peut arrêter le thread à n importe quel moment du thread et dans certains cas, rendre l application instable. Dans le cas d applications complexes ou plusieurs threads partagent les mêmes données, il faudra utiliser les régions critiques afin que l application ne devienne pas instable. Pour cela, vous déclarez une région critique de code avec la méthode BeginCriticalRegion. Ensuite vous placez le code que vous estimez critique et vous terminez la région avec la méthode EndCriticalRegion. Je vous invite à lire à nouveau le tableau des méthodes statiques de la partie 2 pour avoir une description des zones critiques.

12 12 Les Threads 2.4 Contexte d'exécution des threads Tout comme pour la sérialisation, chaque thread possède un contexte d exécution propre, définissant par exemple des informations de sécurités. Vous pouvez manipuler le flux contenant le contexte en utilisant les membres statiques de la classe ExecutionContext. Le contexte d exécution va vous permettre d échanger des données entre threads de manière sécurisée et intègre. Si vous souhaitez utiliser des threads sans contexte particulier, vous devrez utiliser la méthode SuppressFlow. Stopper le flux permet de gagner en performances, en contre partie nous perdons les informations de sécurité, de culture et le contexte de transaction. 'VB Sub Main() Dim flow As AsyncFlowControl = ExecutionContext.SuppressFlow() Dim monthread5 As Thread = New Thread(New ThreadStart(AddressOf affichage2)) monthread5.start() monthread5.join() Console.Read() //C# static void Main(string[] args) AsyncFlowControl flow = ExecutionContext.SuppressFlow(); Thread monthread5 = new Thread(new ThreadStart(affichage2)); monthread5.start(); monthread5.join(); Console.Read(); Ici nous avons supprimé le flux et nous lançons notre Thread normalement. Remarquez que nous avons imbriqué le délégué directement en paramètre de Thread.

13 13 Les Threads Si vous voulez restaurez finalement le contexte, vous pouvez utiliser RestoreFlow ou la méthode Undo de l'objet AsyncFlowControl (ici, l'objet flow): 'VB Sub Main() Dim flow As AsyncFlowControl = ExecutionContext.SuppressFlow() Dim monthread5 As Thread = New Thread(New ThreadStart(AddressOf affichage2)) monthread5.start() monthread5.join() ExecutionContext.RestoreFlow() Console.Read() //C# static void Main(string[] args) AsyncFlowControl flow = ExecutionContext.SuppressFlow(); Thread monthread5 = new Thread(new ThreadStart(affichage2)); monthread5.start(); monthread5.join(); ExecutionContext.RestoreFlow(); Console.Read(); Une fois que notre thread à terminé, nous restaurons le contexte d'exécution pour les autres threads. Vous pouvez enfin utiliser la méthode Run afin de créer et modifier le contexte d'exécution: 'VB Sub Main() Dim contexte As ExecutionContext = ExecutionContext.Capture() ExecutionContext.Run(contexte, New ContextCallback(AddressOf ContexteAppele), Nothing) //C# static void Main(string[] args) ExecutionContext contexte = ExecutionContext.Capture(); ExecutionContext.Run(contexte, new ContextCallback(ContexteAppele), null); Nous récupérons le contexte actuel avec la méthode Capture de ExecutionContext, puis avec la méthode Run nous passons en premier paramètre la référence au nouveau contexte, en second paramètre un délégué pointant sur une méthode ContexteAppele à exécuter dans le contexte fourni, et un l'objet qui sera passé en paramètre de la méthode exécutée (ici, aucun objet est utilisé). La méthode ContexteAppele est une simple fonction qui ne retourne rien et prend une variable de type Object en unique paramètre.

14 14 Les Threads 3 Gestion Multithread Dans un environnement multithread, nous pouvons arriver dans le cas où plusieurs Threads cherchent à accéder aux mêmes données. Considérons le code suivant : 'VB Dim threada, threadb As Thread Public Class Value Public value As Integer End Class Sub methode(byval o As Object) Console.WriteLine("ID : 0 dispose de 1", Thread.CurrentThread.ManagedThreadId, CType(o, Value).value) For i As Integer = 1 To CType(o, Value).value += 1 Next Thread.CurrentThread.Abort(Nothing) Sub Main() Dim v As Value = New Value() v.value = 0 Dim operation As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf methode) threada = New Thread(operation) threadb = New Thread(operation) threada.start(v) threadb.start(v) threada.join() threadb.join() Console.WriteLine(v.value) Console.Read()

15 15 Les Threads //C# public class Value public int value; public static Thread threada, threadb; public static void methode(object o) Console.WriteLine("ID : 0 dispose de 1", Thread.CurrentThread.ManagedThreadId, ((Value)o).value); for(int i = 0; i < ; i++) ((Value)o).value += 1; Thread.CurrentThread.Abort(null); static void Main(string[] args) Value v = new Value(); v.value = 0; ParameterizedThreadStart operation = new ParameterizedThreadStart(methode); threada = new Thread(operation); threadb = new Thread(operation); threada.start(v); threadb.start(v); threada.join(); threadb.join(); Console.WriteLine(v.value); Console.Read(); Si nous interprétons ce code, nous créons un objet nommé "v" contenant une valeur unique. Nous créons également deux threads ainsi qu'une seule méthode à exécuter. Dans cette méthode, nous incrémentons la valeur contenue dans notre objet. Or à l'exécution du programme : ID : 10 dispose de 0 ID : 11 dispose de On remarque que, suite à l'exécution des deux threads le résultat est différent de comme on aurait pu le prévoir. Cela est dû au fait que les processeurs actuels réalisent les opérations en plusieurs étapes. Si on décrit grossièrement les étapes, ils chargent la donnée à modifier dans leur mémoire interne (mémoire cache), puis ils effectuent l'opération désirée et enfin, ils stockent dans la mémoire vive la valeur issue du calcul. Seulement, ces mêmes processeurs sont en général équipés de circuits de traitements permettant à plusieurs processus de s'exécuter (a quelques intervalles près) en même temps.

16 16 Les Threads Le schéma ci dessous reprend ce principe d'exécution simultanée : Dans ce schéma, chacun de nos threads est représenté par une couleur. Cette couleur est réutilisée dans la colonne de droite pour spécifier quel thread a modifié la valeur de V en mémoire. Dans le détail de l'exécution du processeur : Les cases rouges représentent l'opération de copie de la donnée à modifier (de la mémoire vive vers la mémoire cache du CPU). Les cases vertes représentent l'opération à effectuer (ici une incrémentation). Les cases bleues représentent l'opération inverse aux cases rouge (copie de la donnée de la mémoire cache du CPU vers la mémoire vive) Dans tous les cas, une référence de temps est présentée par "T0", "T1",. Au final, ce schéma montre bien que, même si les deux threads se sont exécutés, la valeur n'aura été incrémentée que de 1 alors qu'on aurait voulu qu'elle soit incrémentée de 2. Note : Ce procédé d'exécution simultanée est réalisé grâce au principe de Pipelining (comprenez "ligne d'exécution"). Si vous souhaitez en apprendre d'avantage sur le Multithread et le pipelining, je vous recommande ce premier lien ainsi que celui sur les pipelines. Et ça ne s'arrête pas là. En effet, en plus du problème de multithreading, les ordinateurs actuels disposent de techniques permettant à plusieurs threads de fonctionner sur une seule ligne d'exécution (En donnant un temps d'accès CPU limité à chaque thread) : Le Multithreading simultané. Cela veut dire que, par exemple, le ThreadA pourrait être interrompu par l'hôte avant qu'il n'ait eu le temps de copier la valeur de la mémoire cache vers la mémoire vive, laissant ainsi au ThreadB la valeur initiale de "v" à savoir 0.

17 17 Les Threads 3.1 Première solution : La classe Interlocked Cette classe donne accès à des méthodes statiques permettant d'indiquer au système d'exploitation qu'une donnée ne peut pas être modifiée par deux threads en même temps, tant que le thread qui a récupéré la donnée n'a pas fini son opération. Elles interdisent également à l'hôte d'interrompre un processus prématurément afin de donner la main à un autre processus. Voici les principales méthodes de cette classe : Méthode Description Add Ajoute deux entiers entre eux et remplace le premier entier par le résultat, le tout en une opération atomique. Decrement Décrémente de 1 la valeur passée en paramètre en réalisant une opération atomique. Exchange Echange le contenu de deux objets en effectuant une opération atomique. Increment Incrémente de 1 la valeur passée en paramètre en réalisant une opération atomique. Read Retourne un entier codé sur 64bits en effectuant une opération atomique. Note : Une opération atomique est une opération qui ne peut pas être interrompue. Ainsi, nous pourrions remplacer la ligne d'incrémentation de la valeur par la méthode Increment :

18 18 Les Threads 'VB Dim threada, threadb As Thread Public Class Value Public value As Integer End Class Sub methode(byval o As Object) Console.WriteLine("ID : 0 dispose de 1", Thread.CurrentThread.ManagedThreadId, CType(o, Value).value) For i As Integer = 1 To Interlocked.Increment(CType(o, Value).value) Next Thread.CurrentThread.Abort(Nothing) Sub Main() Dim v As Value = New Value() v.value = 0 Dim operation As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf methode) threada = New Thread(operation) threadb = New Thread(operation) threada.start(v) threadb.start(v) threada.join() threadb.join() Console.WriteLine(v.value) Console.Read()

19 19 Les Threads //C# public class Value public int value; public static Thread threada, threadb; public static void methode(object o) Console.WriteLine("ID : 0 dispose de 1", Thread.CurrentThread.ManagedThreadId, ((Value)o).value); for(int i = 0; i < ; i++) Interlocked.Increment(ref ((Value) o).value); Thread.CurrentThread.Abort(null); static void Main(string[] args) Value v = new Value(); v.value = 0; ParameterizedThreadStart operation = new ParameterizedThreadStart(methode); threada = new Thread(operation); threadb = new Thread(operation); threada.start(v); threadb.start(v); threada.join(); threadb.join(); Console.WriteLine(v.value); Console.Read(); Si nous reprenons le schéma du dessus en le modifiant : Ainsi, le schéma nous montre clairement que cette fois ci, le ThreadB doit attendre que le ThreadA ait fini son opération pour avoir accès à la donnée à modifier.

20 20 Les Threads Note : Ne pensez pas que ce procédé vous fait perdre des performances. En effet, les processeurs possèdent bien plus de deux lignes d'exécution et les systèmes d'exploitation s'arrangent pour que chaque ligne soit occupée dans le bon ordre. Ainsi, si notre ThreadB se trouve sur la troisième ligne d'exécution au lieu de la seconde, le système d'exploitation va en fait occuper la seconde ligne d'exécution avec un autre Thread. Peu importe votre type de processeur, le résultat restera cette fois ci toujours le même : ID : 10 dispose de 0 ID : 11 dispose de Vous pouvez également constater que le problème n'est que partiellement résolu. En effet, au démarrage des deux threads, ceux ci ont encore pour valeur initiale le 0 de départ de notre valeur. Le problème se résout uniquement lorsque l'un des deux threads à finit d'incrémenter la valeur.

21 21 Les Threads 3.2 Seconde solution : Verrouillage de bloc de code La classe Interlocked est utile si vous n'effectuez que des petits traitements. Elle devient dépassée si vous travaillez sur des objets plus complexes. Aussi, le.net Framework propose une autre solution pour verrouiller les données : Les mots clés lock en C# et SyncLock en VB.NET. Si nous reprenons le code précédent en apportant les modifications nécessaire : 'VB Dim threada, threadb As Thread Public Class Value Public value As Integer End Class Sub methode(byval o As Object) SyncLock o Console.WriteLine("ID : 0 dispose de 1", Thread.CurrentThread.ManagedThreadId, CType(o, Value).value) For i As Integer = 1 To CType(o, Value).value += 1 Next Thread.CurrentThread.Abort(Nothing) End SyncLock Sub Main() Dim v As Value = New Value() v.value = 0 Dim operation As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf methode) threada = New Thread(operation) threadb = New Thread(operation) threada.start(v) threadb.start(v) threada.join() threadb.join() Console.WriteLine(v.value) Console.Read()

22 22 Les Threads //C# public class Value public int value; public static Thread threada, threadb; public static void methode(object o) lock (o) Console.WriteLine("ID : 0 dispose de 1", Thread.CurrentThread.ManagedThreadId, ((Value)o).value); for(int i = 0; i < ; i++) ((Value)o).value += 1; Thread.CurrentThread.Abort(null); static void Main(string[] args) Value v = new Value(); v.value = 0; ParameterizedThreadStart operation = new ParameterizedThreadStart(methode); threada = new Thread(operation); threadb = new Thread(operation); threada.start(v); threadb.start(v); threada.join(); threadb.join(); Console.WriteLine(v.value); Console.Read(); Nous obtenons à la compilation : ID : 11 dispose de 0 ID : 10 dispose de A l'image de Interlocked, la valeur utilisée est donc verrouillée sauf que cette fois ci, elle reste verrouillée tant que tout le code de la méthode à exécuter n'a pas été exécuté. Cela se remarque car le premier thread dispose de la valeur initiale 0 alors que le second thread démarre à Grâce à ces mots clés, nous ne verrouillons plus de valeur unique mais des portions de code.

23 23 Les Threads 3.3 Verrouillage avancé : La classe Monitor La classe Monitor propose un ensemble de méthodes statiques pour verrouiller des portions de code de façon un peu plus construite. Voici les principales méthodes : Méthode Description Enter Fourni un verrouillage sur l'objet passé en paramètre. TryEnter Tente de créer un verrouillage sur l'objet passé en paramètre. Peut également fournir un verrouillage avec une limite de temps. Exit Déverrouille l'objet passé en paramètre Wait Déverrouille l'objet passé en paramètre et endort le thread jusqu'à ce qu'il puisse a nouveau obtenir un verrouillage sur l'objet. Si nous reprenons le code précédent : 'VB Dim threada, threadb As Thread Public Class Value Public value As Integer End Class Sub methode(byval o As Object) Monitor.Enter(o) Console.WriteLine("ID : 0 dispose de 1", Thread.CurrentThread.ManagedThreadId, CType(o, Value).value) For i As Integer = 1 To Interlocked.Increment(CType(o, Value).value) If (i = 1) Then Monitor.Exit(o) End If Next Thread.CurrentThread.Abort(Nothing) Sub Main() Dim v As Value = New Value() v.value = 0 Dim operation As ParameterizedThreadStart = New ParameterizedThreadStart(AddressOf methode) threada = New Thread(operation) threadb = New Thread(operation) threada.start(v) threadb.start(v) threada.join() threadb.join() Console.WriteLine(v.value) Console.Read()

24 24 Les Threads //C# public class Value public int value; public static Thread threada, threadb; public static void methode(object o) Monitor.Enter(o); Console.WriteLine("ID : 0 dispose de 1", Thread.CurrentThread.ManagedThreadId, ((Value)o).value); for(int i = 0; i < ; i++) Interlocked.Increment(ref ((Value) o).value); if(i == 1) Monitor.Exit(o); Thread.CurrentThread.Abort(null); static void Main(string[] args) Value v = new Value(); v.value = 0; ParameterizedThreadStart operation = new ParameterizedThreadStart(methode); threada = new Thread(operation); threadb = new Thread(operation); threada.start(v); threadb.start(v); threada.join(); threadb.join(); Console.WriteLine(v.value); Console.Read(); A l'exécution, nous devrions obtenir un résultat similaire à celui ci : ID : 10 dispose de 0 ID : 11 dispose de Le ThreadA démarre et verrouille l'objet au début de son exécution. Ensuite, le ThreadB démarre à son tour et voit son exécution bloquée tant que le ThreadA n'a pas atteint la ligne "Monitor.exit(o)". Pour l'incrémentation, nous utilisons toujours Interlocked car une fois que le ThreadA a débloqué l'objet, les deux threads peuvent de nouveau accéder à la même donnée. Le ThreadB commence avec une valeur différente de 1 tout simplement car le temps qu'il sorte de sa mise en veille, le ThreadA à eu le temps d'effectuer plusieurs incrémentations atomiques verrouillant l'objet à incrémenter. Note : Si votre processeur est plus puissant que celui qui a été utilisé pour cet exemple, il est fort possible que vous obteniez une valeur de démarrage du ThreadB plus élevée. Il est également possible que la valeur de démarrage utilisée par le ThreadB soit de 1 si vous avez beaucoup de chance!

Programmation multitâches avec les Threads

Programmation multitâches avec les Threads Programmation multitâches avec les Threads A. Introduction A.1. Programmation multitâche Tous les systèmes d'exploitation actuels ont la possibilité d'effectuer plusieurs tâches en simultané. En effet,

Plus en détail

JAVA - Compléments du cours 9

JAVA - Compléments du cours 9 JAVA - Compléments du cours 9 Nicolas Baudru Année 2008-2009 Exercice 1 (Création de threads) En Java, il existe deux méthodes pour créer des threads. La première étend la classe Thread : class MonThread

Plus en détail

Année 2008-2009. Les threads Java. Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.

Année 2008-2009. Les threads Java. Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed. Année 2008-2009 Les threads Java Nicolas Baudru mél : nicolas.baudru@esil.univmed.fr page web : nicolas.baudru.perso.esil.univmed.fr 1 Présentation du problème Revenons quelques instants à nos animaux.

Plus en détail

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java Info0604 Programmation multi-threadée Cours 5 Programmation multi-threadée en Java Pierre Delisle Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique 18 février 2015 Plan

Plus en détail

Programmation concurrente en java

Programmation concurrente en java Programmation concurrente en java M. Belguidoum Université Mentouri de Constantine Département Informatique M. Belguidoum (UMC) Programmation concurrente 1 / 29 Plan 1 Introduction 2 Création d'un thread

Plus en détail

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation Cycle Ingénierie 2e année SIGL Dernière mise à jour : 19/10/2006 Christophe Porteneuve Threads Principes Cycle de vie Création java.lang.thread

Plus en détail

E-Mails. Sommaire. 1 E-Mails

E-Mails. Sommaire. 1 E-Mails 1 E-Mails E-Mails Sommaire E-Mails... 1 1 Introduction... 2 2 Formatage d e-mail simple... 3 3 Envoyer un e-mail... 5 3.1 Envoyer un e-mail de manière synchrone... 5 3.2 Envoyer un e-mail de manière asynchrone...

Plus en détail

TPC#9 : Client & Serveur!

TPC#9 : Client & Serveur! TPC#9 : Client & Serveur! Table des matières 1 Structure du rendu 1 2 Introduction 2 3 Sockets et Threads 2 3.1 Les sockets............................................ 2 3.1.1 Cours et exemples....................................

Plus en détail

Les tâches et la synchronisation en langage Java

Les tâches et la synchronisation en langage Java Les tâches et la synchronisation en langage Java Les threads, les verrous, les sémaphores et les moniteurs en Java D après les cours de D. Genthial et B. Caylux Langage Java Threads et synchronisation

Plus en détail

Synchro et Threads Java TM

Synchro et Threads Java TM Synchro et Threads Java TM NICOD JEAN-MARC Master 2 Informatique Université de Franche-Comté UFR des Sciences et Techniques septembre 2008 NICOD JEAN-MARC Synchro et Threads avec Java TM 1 / 32 Sommaire

Plus en détail

Processus, threads et gestion de la synchronisation

Processus, threads et gestion de la synchronisation CS_doNet/05 Page 117 Mercredi, 14. mai 2003 10:32 10 5 Processus, threads et gestion de la synchronisation Nous exposons ici les notions fondamentales que sont les processus et les threads, dans l architecture

Plus en détail

Plan du cours 5:Threads

Plan du cours 5:Threads Plan du cours 5:Threads introduction Définition Création des Threads Gestion des priorités Synchronisation Page : 1 Introduction(1) Les structure de contrôle: If.. Else.. While Switch. Try..catch.. Offrent

Plus en détail

Cours 4. - Créer des animations : la classe Thread et l'interface Runnable - Quelques composants supplémentaires : le choix dans une liste

Cours 4. - Créer des animations : la classe Thread et l'interface Runnable - Quelques composants supplémentaires : le choix dans une liste Cours 4 - Créer des animations : la classe Thread et l'interface Runnable - Quelques composants supplémentaires : le choix dans une liste JComboBox et JList F. Gayral 1 Rappel : multi-tâches multi-tâches

Plus en détail

Consommation de services de données ADO.NET

Consommation de services de données ADO.NET Consommation de services de données ADO.NET Version 1.0 Jean-Christophe VASSELON 2 ADO.Net Data Services Sommaire 1. Introduction... 3 2. La consommation d un service Ado.Net Data Services... 4 2.1 Démarrage

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Introduction à ADO.NET

Introduction à ADO.NET 1 Introduction à ADO.NET Introduction à ADO.NET Sommaire Introduction à ADO.NET... 1 1 Introduction... 2 1.1 Qu est ce que l ADO.NET?... 2 1.2 Les nouveautés d ADO.NET... 2 1.3 Les avantages d ADO.NET...

Plus en détail

Moniteurs, Java, Threads et Processus

Moniteurs, Java, Threads et Processus Moniteurs, Java, Threads et Processus 1 Une vue orientée-objet de la mémoire partagée On peut voir un sémaphore comme un objet partagé accessible par deux méthodes : wait et signal. L idée du concept de

Plus en détail

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static Plan Environnement Client/Serveur Cours 6 Rappels Java (suite) Appel de méthode à distance kn@lri.fr http://www.lri.fr/~kn 1 Rappels sur les systèmes d'exploitations / Communication par mémoire partagée

Plus en détail

Programmation en VBA

Programmation en VBA Programmation en VBA Présentation de Visual Basic Visual Basic : Basic : dérivé du langage Basic (Biginner s All purpose Symbolic Instruction Code) des années 60 Visual : dessin et aperçu de l interface

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

S. Laporte C# mode console DAIGL TS1

S. Laporte C# mode console DAIGL TS1 Bases du langage C# I. C# en mode console (mode texte) Avantages par rapport au mode graphique (Application Windows): - C'est un mode plus proche de l'approche algorithmique (pas de notions de composants,

Plus en détail

Serveurs réseau. 2011 Pearson Education France Java, mise à jour pour Java 7 Timothy Fisher

Serveurs réseau. 2011 Pearson Education France Java, mise à jour pour Java 7 Timothy Fisher 11 Serveurs réseau En pratique, il y a bien plus de chances que vous écriviez du code de client réseau que du code de serveur réseau. Toutefois, bon nombre d applications intègrent à la fois des fonctionnalités

Plus en détail

Localisation des vos applications

Localisation des vos applications 1 Localisation des vos applications Localisation des vos applications Sommaire Localisation des vos applications... 1 1 Introduction... 2 2 Gestion de la globalisation... 3 2.1 Récupérer des informations...

Plus en détail

Introduction : les processus. Introduction : les threads. Plan

Introduction : les processus. Introduction : les threads. Plan IN328 Programmation distribuée avec Java et J2EE 2 - Threads en Java Introduction : les processus Un processus est un ensemble d instructions à exécuter, un espace mémoire réservé et éventuellement d autres

Plus en détail

Dr. M.W. Youssef Systèmes d exploitation Avancées 1ING ISI - 2009

Dr. M.W. Youssef Systèmes d exploitation Avancées 1ING ISI - 2009 Institut Supérieur d Informatique Chapitre 02 Synchronisation des processus Dr. Mohamed-Wassim YOUSSEF 2009 [www.wassimyoussef.info] Systèmes d exploitation avancées 1 ING ISI 1 ére année Ingénieur en

Plus en détail

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting IUT Bordeaux 1 2005-2006 Département Informatique Licence Professionnelle ~ SI TD Objets distribués n 3 : Windows XP et Visual Studio.NET Introduction à.net Remoting Partie 1 : l'analyseur de performances

Plus en détail

Notion de thread (1/2)

Notion de thread (1/2) Notion de thread (1/2) La machine virtuelle java (JVM) permet d'exécuter plusieurs traitements en parallèle (en pratique, ils s'exécutent par tranche et en alternance sur le processeur). Ces traitements

Plus en détail

Problèmes liés à la concurrence

Problèmes liés à la concurrence ENS Cachan Problématique Difficile de gérer la concurrence : Pas toujours facile d avoir des fonctions réentrantes. Risque de race condition : ex : x :=x+1 x :=x+1 On voudrait des blocs d instructions

Plus en détail

Threads. Threads. USTL http://www.lifl.fr/ routier 1

Threads. Threads. USTL http://www.lifl.fr/ routier 1 Threads USTL http://www.lifl.fr/ routier 1 Rappels - Définitions un Process est un programme qui tourne et dispose de ses propres ressources mémoire. OS multi-tâche plusieurs process en concurrence un

Plus en détail

FORMATION VB.NET Visual Studio 2008

FORMATION VB.NET Visual Studio 2008 FORMATION VB.NET Visual Studio 2008 Livret 1 Introduction à Visuàl Studio Thierry TILLIER http://www.coursdinfo.fr Ce support de cours est réservé à un usage personnel. Toute utilisation et diffusion dans

Plus en détail

Chapitre 5. Communication interprocessus. 5.1 Introduction

Chapitre 5. Communication interprocessus. 5.1 Introduction Communication interprocessus 5.1 Introduction Dans une activité parallèle (ou pseudo parallèle), un ensemble de processus séquentiels s exécutent en parallèle. Cette exécution résulte deux types de relations

Plus en détail

Un ordonnanceur stupide

Un ordonnanceur stupide Un ordonnanceur simple Université Paris Sud L objet des exercices qui suivent est de créer un ordonanceur implantant l algorithme du tourniquet ( round-robin scheduler ). La technique utilisée pour élire

Plus en détail

Synchronisation par. Rappels. Plan. Conditions et moniteurs (1/7) Inf 431 Cours 11. jeanjacqueslevy.net

Synchronisation par. Rappels. Plan. Conditions et moniteurs (1/7) Inf 431 Cours 11. jeanjacqueslevy.net Rappels Inf 431 Cours 11 un processus t (Thread) est un programme qui s exécute Synchronisation par mémoire partagée tstart lance l exécution concurrente de la méthode trun de t tinterrupt signale qu on

Plus en détail

Chapitre 4. Le modèle de composants : les services

Chapitre 4. Le modèle de composants : les services Chapitre 4 Le modèle de composants : les services 1 Les services "A Service is an application component that can perform long-running operations in the background and does not provide a user interface."

Plus en détail

Partie 3 : Programmation réseau «avancée» en C#

Partie 3 : Programmation réseau «avancée» en C# Partie 3 : Programmation réseau «avancée» en C# Plan du cours La socket vue comme un flux Les threads Serveur Multi threadé Serveur «pré threadé» Classes facilitant la programmation réseau TCP /IP en C#

Plus en détail

Paginer les données côté serveur, mettre en cache côté client

Paginer les données côté serveur, mettre en cache côté client Paginer les données côté serveur, mettre en cache côté client Vous voulez sélectionner des lignes dans une table, mais celle-ci comporte trop de lignes pour qu il soit réaliste de les ramener en une seule

Plus en détail

Introduction au débogage avec Eclipse

Introduction au débogage avec Eclipse Introduction au débogage avec Eclipse C. Pain-Barre et H. Garreta IUT INFO Année 2006-2007 1 Notion de debogage Tout développeur est confronté un jour à un programme qui plante pour une raison apparemment

Plus en détail

1 Questions de cours (4,5 points) 2 Multiplication avec des PRAM (4 points)

1 Questions de cours (4,5 points) 2 Multiplication avec des PRAM (4 points) Université de Provence MASTER INFORMATIQUE Programmation Parallèle et Distribuée 2010-2011 Programmation Parallèle et Distribuée Partiel jeudi 10 mars 2011 2h00 Aucun document autorisé. Les réponses doivent

Plus en détail

SUPPORT DE COURS EXCEL 2007 - MACROS

SUPPORT DE COURS EXCEL 2007 - MACROS SOMMAIIRE A.... PRESENTATION DES MACROS DANS EXCEL... 2 B... ENREGISTRER UNE MACRO... 2 1 PREPARATION... 2 2 ENREGISTRER UNE MACRO... 3 3 MODIFIER UNE MACRO... 3 4 AFFECTER UNE MACRO UN OBJET DE LA FEUILLE

Plus en détail

Programmation Concurrente, Réactive et Répartie

Programmation Concurrente, Réactive et Répartie Programmation Concurrente, Réactive et Répartie Cours N 3 Emmanuel Chailloux Master d Informatique Université Pierre et Marie Curie année 2012-2013 Cours 3 - Programmation Concurrente, Réactive et Répartie

Plus en détail

Tests unitaires avec Visual Studio

Tests unitaires avec Visual Studio Tests unitaires avec Visual Studio (source MSDN) Rappels (initiation aux tests unitaires SI6 Tp6) Les tests unitaires offrent aux développeurs une méthode rapide pour rechercher des erreurs de logique

Plus en détail

Systèmes d Exploitation temps réel. Programmation des STR. Gabriel FREY 2013 freyg.it@gmail.com

Systèmes d Exploitation temps réel. Programmation des STR. Gabriel FREY 2013 freyg.it@gmail.com Systèmes d Exploitation temps réel 1 2 Plan de l intervention 1. Introduction aux Systèmes Temps Réel 2. Programmation concurrente Synchronisation et communication Besoin en facultés temporelles 3. Ordonnancement

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Services Windows et Domaines d application

Services Windows et Domaines d application 1 Sommaire... 1 1 Introduction... 2 2 Les services Windows... 3 2.1 Création et mise en place d un service pas à pas... 4 2.1.1 Créer un service... 4 2.1.2 Gérer son service Windows... 12 2.2 Exemple pratique...

Plus en détail

Université Paris 1 Panthéon Sorbonne UFR 06. Fiche de TD VBA

Université Paris 1 Panthéon Sorbonne UFR 06. Fiche de TD VBA 1 / 13 Fiche de TD VBA L objectif de cette fiche est de faire un rappel (voire une présentation rapide) du langage de programmation VBA et de son usage sur des documents Excel et Access. Pour rappel, VBA

Plus en détail

Programmation Multi-Threading en Java

Programmation Multi-Threading en Java Programmation Multi-Threading en Java Christophe Gravier, Frédérique Laforest, Julien Subercaze Télécom Saint-Étienne Université Jean Monnet {prénom.nom}@univ-st-etienne.fr FI2_INFO4 2012 2013 1 / 35 Plan

Plus en détail

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Le MSMQ. Version 1.0. Pierre-Franck Chauvet Le MSMQ Version 1.0 Z Pierre-Franck Chauvet 2 [Le MSMQ] [Date : 10/10/09] Sommaire 1 Introduction... 3 2 Le Concept... 5 2.1 Les messages... 5 2.2 Les files d attentes... 5 2.3 WorkGroup... 7 2.4 Active

Plus en détail

Cours 1 : Introduction Générale + Objet I

Cours 1 : Introduction Générale + Objet I Organisation du cours Équipe pédagogique DUT Informatique S3 - Programmation Java Jean-Claude MARTIN MARTIN@LIMSI.FR Cours 1 : Introduction Générale + Objet I Jean-Claude MARTIN (Responsable, Cours, TD

Plus en détail

Programmation réseau en Java : les threads

Programmation réseau en Java : les threads Programmation réseau en Java : les threads Michel Chilowicz Transparents de cours sous licence Creative Commons By-NC-SA Master 2 TTT Université Paris-Est Marne-la-Vallée Version du 28/02/2013 chilowi

Plus en détail

INITIATION AU LANGAGE JAVA

INITIATION AU LANGAGE JAVA INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal

Plus en détail

Correction langage Java

Correction langage Java MINISTÈRE DE L ÉCOLOGIE, DU DÉVELOPPEMENT DURABLE, DES TRANSPORTS ET DU LOGEMENT EXAMEN PROFESSIONNEL DE VÉRIFICATION D APTIDUDE AUX FONCTIONS DE PROGRAMMEUR Session 2010 Correction langage Java Langage:

Plus en détail

Programmation VBA. Identificateurs. Types de base. Déclaration d une variable. Commentaires. Activer l onglet Développeur (Excel)

Programmation VBA. Identificateurs. Types de base. Déclaration d une variable. Commentaires. Activer l onglet Développeur (Excel) Activer l onglet Développeur (Excel) Programmation VBA Michel Reid Cliquez sur le bouton Office (coin supérieur gauche) Cliquez sur le bouton Options Excel Dans la section Standard, cochez la case Afficher

Plus en détail

Opérations de bases sur les workflows

Opérations de bases sur les workflows Opérations de bases sur les workflows Version 1.0 Z Mathieu Hollebecq Paul Lillo Esquerré 2 Opérations de bases sur les workflows 21 02 09 Sommaire 1 Introduction... 3 1.1 Ce que nous avons vu, ce que

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Gestion des threads Gestion des timers Gestion des threads Gestion des timers Programmation - Threads - Nicolas Malandain 1 Gestion des threads Principe Création Cycle Synchronisation Collections May 1,

Plus en détail

Un chat en C# Extrait de Wikipédia

Un chat en C# Extrait de Wikipédia Un chat en C# Un chat utilise un mécanisme de communication entre deux applications distantes. Il existe plusieurs solutions pour faire communiquer deux applications ; nous allons, ici, utiliser le protocole

Plus en détail

La sérialisation. Sommaire. 1 La sérialisation

La sérialisation. Sommaire. 1 La sérialisation 1 La sérialisation La sérialisation Sommaire La sérialisation... 1 1 Introduction... 2 2 Les bases de la sérialisation... 3 2.1 Sérialisation Binaire... 3 2.2 Dé sérialiser un objet... 5 2.3 Rendre ses

Plus en détail

LINQ to XML. Version 1.1

LINQ to XML. Version 1.1 LINQ to XML Version 1.1 Z 2 Chapitre 04 - LINQ to XML Sommaire 1 Présentation... 3 2 Les différentes classes de LINQ to XML... 4 2.1 «XDocument» et «XElement» :... 4 2.2 «XAttribute» et «XComment» :...

Plus en détail

} 7 Variables (composantes)

} 7 Variables (composantes) Chapitre 4 Tableaux Jusqu ici, nous avons employé les variables pour stocker les valeurs individuelles de types primitifs : une variable de type int pour stocker un entier, une variable de type boolean

Plus en détail

Sauvegardes de données

Sauvegardes de données 1 Sauvegardes de données Sauvegardes de données Sommaire Sauvegardes de données... 1 1 Introduction... 2 2 Recherche du chemin de stockage... 3 2.1 Le dossier de jeu... 3 2.2 Le dossier privé... 5 3 Gestion

Plus en détail

AUTOMATISER SES TÂCHES AVEC LES MACROS

AUTOMATISER SES TÂCHES AVEC LES MACROS AUTOMATISER SES TÂCHES AVEC LES MACROS U ne macro est un ensemble de commandes qui s exécute autant de fois que nécessaire simplement en les appelant par son nom. Les macros permettent d automatiser les

Plus en détail

Les threads. Chapitre 4. 4.1 Introduction. 4.1.1 Avantages

Les threads. Chapitre 4. 4.1 Introduction. 4.1.1 Avantages Chapitre 4 Les threads 4.1 Introduction Le modèle de processus décrit au chapitre précédent est un programme qui s exécute selon un chemin unique avec un seul compteur ordinal. On dit qu il a un flot de

Plus en détail

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing 3/4/27 Programmation Avancée Multimédia Multithreading Benoît Piranda Équipe SISAR Université de Marne La Vallée Besoin Programmes à traitements simultanés Réseau Réseau Afficher une animation en temps

Plus en détail

Mise à niveau en Java

Mise à niveau en Java Mise à niveau en Java Cours 1 Stéphane Airiau Université Paris-Dauphine Stéphane Airiau (Université Paris-Dauphine) - Java Cours 1 1 Aujourd hui Eléments de base Variables, opérateurs, type d une expression

Plus en détail

Le problème des lecteurs et rédacteurs : La communication par envoi de messages. définition. Les processus lecteurs et rédacteurs

Le problème des lecteurs et rédacteurs : La communication par envoi de messages. définition. Les processus lecteurs et rédacteurs Le problème des lecteurs et rédacteurs définition Ce problème généralise celui de l exclusion mutuelle. On distingue deux types de processus : Les lecteurs (readers) qui lisent uniquement l information

Plus en détail

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012 Université Mohammed Premier Année universitaire 2011-2012 Faculté des Sciences Filière SMI Département de Mathématiques Module : POO Java et d Informatique Semestre : S5 Correction de l examen écrit de

Plus en détail

Projet gestion d'objets dupliqués

Projet gestion d'objets dupliqués Projet gestion d'objets dupliqués Daniel Hagimont Daniel.Hagimont@enseeiht.fr 1 Projet Service de gestion d'objets dupliqués Mise en cohérence lors de la prise d'un verrou sur un objet Pas de verrous imbriqués

Plus en détail

TD Objets distribués : Introduction à.net Remoting

TD Objets distribués : Introduction à.net Remoting IUT Bordeaux 1 2008-2009 Département Informatique Licence Professionnelle ~ SI TD Objets distribués : Introduction à.net Remoting Vous mettrez en œuvre votre première application en.net remoting. Les sources

Plus en détail

Java Avancé - Cours 2

Java Avancé - Cours 2 Java avancé - cours 2 1/8 Java Avancé - Cours 2 Plan 1 Communication entre objets 1 1.1 Motivation....................................................... 1 1.2 Relations entre le panier et le rayon.........................................

Plus en détail

La programmation concurrente

La programmation concurrente La programmation concurrente Jean-Ferdy Susini Maître de Conférences - CNAM Département Informatique Sources : Android Developpers, Wikipedia Paris, 06/05/2015 Architecture matérielle 2 Considérons l architecture

Plus en détail

Principes des systèmes d'exploitation

Principes des systèmes d'exploitation Principes des systèmes d'exploitation Fonctions : Machine virtuelle : ajoute des fonctionnalités (par exemple système de fichier vs accès pistes - secteurs) Gestion des ressources : processeur, mémoire,

Plus en détail

Parallélisme. (Basé sur Concepts of Programming Languages, 8 th edition, by Robert W. Sebesta, 2007)

Parallélisme. (Basé sur Concepts of Programming Languages, 8 th edition, by Robert W. Sebesta, 2007) Parallélisme (Basé sur Concepts of Programming Languages, 8 th edition, by Robert W. Sebesta, 2007) 1 Les différents types de Parallélisme Le Parallélisme dans l'exécution de logiciel peut se produire

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

1 Le Parking revisité

1 Le Parking revisité Module I6 - Manipulation de threads II 13 décembre 2012 1 Le Parking revisité Une société de gestion de parkings de voitures souhaite mettre en place un système automatique d affichage en temps réel de

Plus en détail

Introduction à la programmation concurrente

Introduction à la programmation concurrente à la programmation concurrente et sémaphores Yann Thoma Reconfigurable and Embedded Digital Systems Institute Haute Ecole d Ingénierie et de Gestion du Canton de Vaud This work is licensed under a Creative

Plus en détail

Configurer les contrôles Windows Form

Configurer les contrôles Windows Form 1 Configurer les contrôles Windows Form Configurer les contrôles Windows Form Sommaire 1 Introduction... 2 2 Gestion des contrôles composés... 2 2.1 Qu est ce qu un contrôle composé... 2 2.2 Création d

Plus en détail

Programmation Java Avancée

Programmation Java Avancée Programmation Java Avancée Module RPCI01 Département R&T IUT de Villetaneuse 2 novembre 2015 Département R&T Programmation Java Avancée 2 novembre 2015 1 / 74 Plan du cours 1 La gestion des exceptions

Plus en détail

Programmation Android TP7 - WebServices

Programmation Android TP7 - WebServices 1. WebService Dans le TP6, les avis étaient stockés dans une base SQL. Cette semaine les n-uplets sont stockés sur une base de données externe gérée par un serveur HTTP sur lequel tournent des scripts

Plus en détail

Fichiers de configuration.net Remoting

Fichiers de configuration.net Remoting Fichiers de configuration.net Remoting 2 Fichiers de configuration.net Remoting 29/07/09 Sommaire 1 Introduction... 3 2 Qu es ce qu un fichier de configuration?... 4 3 L intérieur du fichier... 5 3.1 Pour

Plus en détail

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores INTRODUCTION AUX SYSTEMES D EXPLOITATION TD2 Exclusion mutuelle / Sémaphores Exclusion mutuelle / Sémaphores - 0.1 - S O M M A I R E 1. GENERALITES SUR LES SEMAPHORES... 1 1.1. PRESENTATION... 1 1.2. UN

Plus en détail

Systèmes d'exploitation. Pierre Antoine Champin IUT A de Lyon Séance 4

Systèmes d'exploitation. Pierre Antoine Champin IUT A de Lyon Séance 4 Systèmes d'exploitation Pierre Antoine Champin IUT A de Lyon Séance 4 Plan de la séance 1. Concurrence 2. Problématique liée à la concurrence section critique mécanisme d'exclusion mutuelle 3. Solutions

Plus en détail

PG208, Projet n 1 : Gestion d une bibliothèque

PG208, Projet n 1 : Gestion d une bibliothèque PG208, Projet n 1 : Gestion d une bibliothèque Bertrand LE GAL, Serge BOUTER et Clément VUCHENER Filière électronique 2 eme année - Année universitaire 2011-2012 1 Introduction 1.1 Objectif du projet L

Plus en détail

Communications et synchronisations. Système L3, 2014-2015 1/21

Communications et synchronisations. Système L3, 2014-2015 1/21 Communications et synchronisations Système L3, 2014-2015 1/21 Le problème des philosophes (Dijkstra 1965) Cinq philosophes sont assis autour d une table ronde Chaque philosophe a devant lui un plat de

Plus en détail

ARCHITECTURES DES SYSTÈME DE BASE DE DONNÉES. Cours Administration des Bases de données M Salhi

ARCHITECTURES DES SYSTÈME DE BASE DE DONNÉES. Cours Administration des Bases de données M Salhi ARCHITECTURES DES SYSTÈME DE BASE DE DONNÉES Cours Administration des Bases de données M Salhi Architectures des Système de base de données Systèmes centralisés et client-serveur Server System Architectures

Plus en détail

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. RMI Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. Méthode proche de RPC. Outils et classes qui rendent l'implantation d'appels de méthodes d'objets distants aussi simples

Plus en détail

Programmation avancée et répartie en Java : les processus légers

Programmation avancée et répartie en Java : les processus légers Programmation avancée et répartie en Java : les processus légers Frédéric Gava L.A.C.L Laboratoire d Algorithmique, Complexité et Logique Cours de M1 MIAGE (d après les notes de cours de Fabrice Mourlin)

Plus en détail

PROGRAMMATION EVENEMENTIELLE sur EXCEL

PROGRAMMATION EVENEMENTIELLE sur EXCEL MASTERs SMaRT & GSI PROGRAMMATION EVENEMENTIELLE sur EXCEL Pierre BONNET Programmation évènementielle La programmation évènementielle permet un appel de procédure depuis l'interface HMI d'excel (ou d'un

Plus en détail

Résumé Introduction Programmation Java

Résumé Introduction Programmation Java Résumé Introduction Programmation Java Concepts Un programme : séquence, test conditionnel, boucles. Objets : Les objets Java modélisent les objets d un problème donné Classe : Les objets sont crées à

Plus en détail

ASSEMBLAGE ET ÉDITION DES LIENS

ASSEMBLAGE ET ÉDITION DES LIENS ASSEMBLAGE ET ÉDITION DES LIENS Mewtow 11 novembre 2015 Table des matières 1 Introduction 5 2 La chaine d assemblage 7 2.1 Résolution des symboles.............................. 7 2.2 Relocation.....................................

Plus en détail

Objets distribués et Appel de Méthodes à Distance 2009-2010

Objets distribués et Appel de Méthodes à Distance 2009-2010 Objets distribués et Appel de Méthodes à Distance 2009-2010 1 Objectif : construire une application où différents modules peuvent être situés sur des machines différentes, en utilisant un modèle à objets

Plus en détail

Création d objet imbriqué sous PowerShell.

Création d objet imbriqué sous PowerShell. Création d objet imbriqué sous PowerShell. Par Laurent Dardenne, le 13/01/2014. Niveau Ce tutoriel aborde la création d objet composé, c est-à-dire que certains de ses membres seront eux-mêmes des PSObjects.

Plus en détail

Modèle client-serveur

Modèle client-serveur Modèle client-serveur Daniel Hagimont IRIT/ENSEEIHT 2 rue Charles Camichel - BP 7122 31071 TOULOUSE CEDEX 7 Daniel.Hagimont@enseeiht.fr http://hagimont.perso.enseeiht.fr 1 Plan Principes généraux Modèle

Plus en détail

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris : Développement d un client REST, l application Vélib 1. Présentation L application présentée permet de visualiser les disponibilités des vélos et des emplacements de parking à la disposition des parisiens

Plus en détail

Les tâches et la synchronisation en langage Java

Les tâches et la synchronisation en langage Java Les tâches et la synchronisation en langage Java Les threads, les verrous, les sémaphores et les moniteurs en Java D après les cours de D. Genthial et B. Caylux Langage Java Threads et synchronisation

Plus en détail

Développer une application en VB.NET 2.0. Partie 3 : Création d une base de données SQL Serveur

Développer une application en VB.NET 2.0. Partie 3 : Création d une base de données SQL Serveur Développer une application en VB.NET 2.0 Cécile Muno Christian Maréchal Partie 3 : Création d une base de données SQL Serveur Sommaire Rappels Note des auteurs Quelques références I. Introduction à SQL

Plus en détail

Gestion distribuée (par sockets) de banque en Java

Gestion distribuée (par sockets) de banque en Java Gestion distribuée (par sockets) de banque en Java Université Paris Sud Rappel sur la solution locale de gestion simple de banque L objet de cet exercice était de créer une application java qui implante

Plus en détail

Java Licence professionnelle CISI 2009-2010

Java Licence professionnelle CISI 2009-2010 Java Licence professionnelle CISI 2009-2010 Cours 10 : Type générique (c) http://manu.e3b.org/java/tutoriels/avance/generique.pdf 1 Introduction La programmation générique - nouveauté la plus significative

Plus en détail

Chap. V : Les interruptions

Chap. V : Les interruptions UMR 7030 - Université Paris 13 - Institut Galilée Cours Architecture et Système Nous étudions dans ce chapitre les interruptions matérielles (ou externes), c est-à-dire déclenchées par le matériel (hardware)

Plus en détail

Des macros Excel pour exporter et importer des modules de code VBA

Des macros Excel pour exporter et importer des modules de code VBA Cah. Techn. Inra, 2008, 65, 13-22 Des macros Excel pour exporter et importer des modules de code VBA Jean-Baptiste Duclos 1 Résumé : Cet article présente deux macros VBA Excel pour sauvegarder facilement

Plus en détail

Compléments sur des concepts et des idiomes Java

Compléments sur des concepts et des idiomes Java Compléments sur des concepts et des idiomes Java D. Conan Rev : 951 CSC 4509 ASR4 Télécom SudParis Juin 2013 Table des matières Compléments sur des concepts et des idiomes Java D. Conan,, Télécom SudParis,

Plus en détail

M2-GamaGora. Programmation Multi-Thread - partie 1. J.C. Iehl. November 13, 2008

M2-GamaGora. Programmation Multi-Thread - partie 1. J.C. Iehl. November 13, 2008 Programmation Multi-Thread - partie 1 November 13, 2008 pourquoi ça ne marche pas? et alors? introduction aux threads threads : pourquoi ça ne marche pas? et alors? un nouveau point d entrée (une fonction

Plus en détail