47
1 Chapitre 2 Mode Message Asynchrone (interface Socket)

1 Chapitre 2 Mode Message Asynchrone (interface Socket)

Embed Size (px)

Citation preview

Page 1: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

1

Chapitre 2

Mode Message Asynchrone (interface Socket)

Page 2: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

2

Mode Message Asynchrone• Basé directement sur le mode de communication par

message.• Un service comprenant essentiellement deux primitives

pour communiquer et se synchroniser.TYPE COM_MESSAGE_ASYNCHRONE;METHOD envoyer (id_émetteur, id_récepteur,message, compléments);METHOD recevoir (id_émetteur, id_récepteur,message);METHOD ...;END COM_MESSAGE_ASYNCHRONE.identificateurs : ports de communicationmessages : zones de données (typées).compléments : selon les sémantiques multiples définissant les qualités de

services

Page 3: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

3

Mode Message Asynchrone Aspect principal pour la communication et la synchronisation

l'asynchronisme entre l'émetteur et le récepteur

Sémantique de l'activationa) De type activation en

parallèle ("fork") b) Interprétable également

comme un branchement inconditionnel ("goto").

- Le mode message asynchrone réalise un "producteur-consommateur" réparti entre un émetteur et un récepteur.

- Complet parallélisme autorisé entre l'émetteur et le récepteur.

Rien n'empêche aussi l'une des entités ('émetteur) de suspendre son exécution.

Page 4: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

4

Mode Message Asynchrone Aspect d'échange de données

• Le mode message permet une opération d'affectation de variable à distance:

envoyer (M=écrire(v) , id_dest)recevoir (M'=lire(v) , id-emet). Avec possibilité de gestion de cohérence des types des

variables v.. Avec une sémantique de consistance des données entre

l'émetteur et le récepteur très faible.• Propriété minimale de cohérence des

communications point à point: la causalitéenvoyer (M=écrire) -> recevoir (M'=lire)Si a t1 : émetteur.écrire (v,t1)

=> il existe t2>t1 : recepteur.lire (v, t2)

Page 5: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

5

Mode Message Asynchrone Interaction entre processus par échange de message

Comportement séquentiel des processus:

=> Ensemble de processus (entités réseaux) séquentiels communicants (très souvent en mode point à point deux entités seulement).

=> Les méthodes de spécification de chaque processus utilisent des automates d'état fini Interaction entre processus par échange de message

=> Les processus communicants se synchronisent par messages asynchrones.

Page 6: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

6

Mode Message Asynchrone Représentation graphique des applications: automates

• États : Il est défini par un ensemble significatif de variables locales de chaque processus.

• Transitions : Elles comportent deux mentions: les conditions, et les actions.– Condition :

• condition booléenne portant sur les variables locales.• condition booléenne portant sur les échanges (requête de

service, message entrant).• condition booléenne portant sur les signaux internes

(horloge).

– Action : C'est l'opération réalisée lors du franchissement de la transition.

Page 7: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

7

Mode Message Asynchrone

Représentation des opérations sur les diagrammes (conditions et actions)

condition recevoir(M) ?M

action envoyer(M) !M

Exemple :

P1 :P2!M1

P2 :P1?M1Avec

Type[message_émis] = Type [message_reçu]

Page 8: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

8

Mode Message AsynchroneExemples

Page 9: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

9

Mode Message Asynchrone

Automate du service

• Établissement de la liste des unités de service (primitives, SDU) de service échangeables entre le niveau n et le niveau n+1

• Définition des enchaînements autorisés de primitives sous la forme d'un automate d'état.

=> Toutes les successions légales qu'un observateur de l'interface n n+1 peut observer.

Page 10: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

10

Mode Message Asynchrone

Exemple de comportements autorisés duservice de connexion de session OSI.

Page 11: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

11

Mode Message AsynchroneAutomate du protocole

• Établissement de la liste des unités de protocole (messages, PDU) échangés entre deux niveaux n.

• Définition de tous les enchaînements de PDU qu'un observateur de la voie de communication peut observer).

Page 12: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

12

Mode Message AsynchroneUne partie du protocole d'ouverture de

connexion de session

Page 13: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

13

Mode Message AsynchroneAutomate complet

Page 14: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

14

Mode Message Asynchrone Problèmes de constructions

• Réceptions non spécifiées– Dans un état un message peut se présenter dont le cas n'a pas

été prévu

• Interblocages– Dans un état un message (ou une configuration) est attendu

qui ne peut jamais se présenter.

• Définition d'assertions de bon fonctionnement sur le modèle à automates communicants.– assertions portant sur des variables d'état (booléennes)– assertions portant sur des trajectoires (logique

temporelle)

Page 15: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

15

Mode Message Asynchrone

Les interfaces de "transport"

Existence d'interfaces logicielles pour l'accès à des piles de protocoles : API utilisable de préférence pour plusieurs piles Sockets, TLI, etBEUI….

Sockets: Interface de programmation pour la suite TCP/IP. 1981. Système UNIX Berkeley. Le standard UNIX de facto. L'API sockets sous Windows est baptisée WinSock

Page 16: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

16

Mode Message AsynchroneConclusion

• C'est le mode le plus basique Comparable à l'assembleur (affectation, branchement).

• Le moins contraignant il permet aux utilisateurs par des échanges successifs, la construction de tout type de protocole.

• L'utilisateur n'a pas en général envie d'être obligé de construire ses propres outils d'où:

• L'enrichissement du mode message en termes de qualité de service par les couches successives des protocoles réseau.

• Le besoin d'autres schémas prédéfinis plus complexes.• Le mode message asynchrone est encore le mode privilégié

des interfaces On peut prévoir à terme son "enfouissement" dans les couches internes.

Page 17: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

17

L'interface SOCKETIntroduction

• Une "socket" est un point d'accès de service pour des couches transport essentiellement TCP/UDP

• La caractéristique principale d'une socket est donc son type.

• Une socket possède un nom: un identifiant unique sur chaque site (en fait un entier sur 16 bits) appelé "numéro de port". Un socket = (Numéro de port, Adresse IP).

• Une socket est caractérisée par un ensemble de primitives de service pour l'accès aux fonctions de transport.

• Une socket encapsule des données:– un descriptif (pour sa désignation et sa gestion)– des files d'attente de messages en entrée et en sortie.

Page 18: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

18

representation de socket

Page 19: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

19

L'interface SOCKETChoix de conception des sockets

• TCP– TCP est un transport fiable en connexion et en

mode bidirectionnel point à point.– Une socket TCP peut être utilisée par plusieurs

connexions TCP simultanément.– Une connexion est identifiée par le couple

d'adresses socket des deux extrémités.• UDP

– Un échange UDP est sans connexion (échange de datagrammes).

– Les zones de données qui correspondent à des envois successifs sont respectées à la réception.

Page 20: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

20

L'interface SOCKET

Les primitives de l'interface socket: socket()

Permet la création d'un nouveau point d'accès de service transport.int socket ( int famille, int type, int protocole);• Trois paramètres d'appel

– "Famille" d'adresses réseaux utilisées locale, réseau IP, réseau OSI ... • AF_UNIX : Communication locale (i-node)• AF_INET : Communication Internet• AF_ISO : Communication ISO

– Type de la socket (du service) sémantique de la communication.• SOCK_STREAM : Flot d'octets en mode connecté (ne préserve pas les

limites de l'enregistrement)• SOCK_DGRAM : Datagramme en mode non connecté (préserve les limites

de l'enregistrement)– Protocole de transport utilisé.

• IPPROTO_TCP SOCK_STREAM• IPPROTO_UDP SOCK_DGRAM

• Un paramètre résultat:• le numéro de descripteur socket.

Page 21: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

21

L'interface SOCKET Les primitives de l'interface socket: bind()

Primitive pour l'attribution d'une adresse de socket à un descripteur de socket.int bind (int s, struct sockaddr_in *mon_adresse, int longueur_mon_adresse)• Trois paramètres d'appel

– Numéro du descriptif de Socket (s).– Structure de donnée adresse de socket. Pour internet

struct in_addr { u_long s_addr ; } ;s_addr : 32 bits constituants l’identificateur du réseau et de la

machine hôteordonnes selon l’ordre réseau.struct sockaddr_in {short sin_family ;u_short sin_port ;struct in_addr sin_addr ;char sin_zero[8] ;} ; sin_family : AF_INET ; sin_port : 16 bits de numero de port

( ordonnancement réseau); sin_addr : 32 bits constituants l’identificateur du reseau et de la machine hôte ordonnes selon l’ordre réseau. sin_zero[8] : inutilisés ;

– Longueur de la structure d'adresse.

Page 22: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

22

L'interface SOCKET Les primitives de l'interface socket: listen()

Utilisé dans le mode connecté lorsque plusieurs clients sont susceptibles d'établir plusieurs connexions avec un serveur.

int listen(int s , int max_connexion)

• s : Référence du descripteur de socket

• max_connexion : Nombre maximum de connexions.

Page 23: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

23

L'interface SOCKET Les primitives de l'interface socket: accept()

Dans le mode connecté la primitive accept permet de se bloquer en attente d'une nouvelle demande de connexion. Après l'accept, la connexion est complète entre les deux processus.int accept (int s, struct sockaddr_in *addr_cl, int lg_addr_cl) retourne ns.– s : Référence du socket qui est en ecoute.– addr_cl : L'adresse du client.– lg_addr_cl: La longueur de l'adresse.– L’appel retourne un descripteur d’une nouvelle socket ns.

• Pour chaque nouvelle connexion entrante la primitive fournit un pointeur sur une nouvelle socket qui est du même modèle que la socket précédemment créée.

Page 24: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

24

L'interface SOCKET Les primitives de l'interface socket: connect()

• La primitive connect (bloquante) permet à un client de demander l'ouverture (active) de connexion à un serveur. L'adresse du serveur doit être fournie.

int connect (int s, struct sockaddr_in *addr_serv, int lg_addr_serv) – s : La référence de la socket– addr_serv : L'adresse du serveur.– lg_addr_serv : La longueur de l'adresse.

Page 25: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

25

L'interface SOCKET Les primitives de l'interface socket: send(), recv()

Les primitives send, recv (bloquantes) permettent l'échange effectif des données.

int send (int s, char *zone, int lg_zone,int options_com)

int recv (int s,char *zone, int lg_zone,int options_com)– s : La référence de la socket– zone : La zone à échanger.– lg_zone : La longueur de la zone.– options_com : Les options (données urgentes , ....)

Page 26: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

26

L'interface SOCKET

Les primitives de l'interface socket: sendto(), recvfrom()

• Les primitives sendto, recvfrom permettent l'échange des données plutôt dans le mode non connecté UDP.int sendto ( int s, char *zone, int lg_zone, int options_com, struct sockaddr_in *addr_dest, int lg_addr)int recvfrom ( int s, char *zone, int lg_zone, int options_com, struct sockaddr_in *addr_emet, int lg_addr)– addr_dest : L'adresse du destinataire.– addr_emet : L'adresse de l'émetteur.– lg_addr : La longueur de l'adresse.

Page 27: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

27

L'interface SOCKET Les primitives de l'interface socket: shutdown(), close()

• Shutdown; Permet la purge des données en instance sur une socket avant la fermeture.

shutdown(s , h);– h = 0 l’usager ne veut plus recevoir de données– h = 1 l’usager ne veut plus envoyer de données– h = 2 l’usager ne veut plus ni recevoir, ni envoyer.

• Close; Permet la fermeture d'une connexion et la destruction du descriptif.

int close ( int s )

Page 28: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

28

L'interface SOCKETrésumé

• Fonctionnement en TCP– Serveur.

• socket• bind• listen• accept• recv, send• close

– Client.• socket• connect• recv, send• close

• Fonctionnement en UDP– Socket– Bind– recvfrom, sendto– close

Page 29: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

29

L'interface SOCKETexemple, TCP

Série

ParallèleServeur en mode connecte

Page 30: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

30

L'interface SOCKETexemple, UDP

série

ParallèleServeur en mode doconnecte

Page 31: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

31

L’interface Socketexemple de serveur itératif

int sockfd, newsockfd ;

if ( ( sockfd = socket (.....)) < 0 ) err_sys(«erreur de socket«) ;

if ( bind ( sockfd, ....) < 0 ) err_sys («erreur de bind»);

if ( listen ( sockfd , 5) < 0 ) ; err_sys (« erreur de listen» ) ;

for ( ; ; ) {

newsockfd = accept ( sockfd, .....) ;

if ( newsockfd < 0)

err_sys( «erreur de accept») ;

execute_la_demande( newsockfd ) ;

close ( newsockfd ) ;

}

Page 32: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

32

L’interface Socket exemple de serveur parallèle

int sockfd, newsockfd ;

if ( ( sockfd = socket (.....)) < 0 ) err_sys(«erreur de socket«) ;

if ( bind ( sockfd, ....) < 0 ) err_sys («erreur de bind»);

if ( listen ( sockfd , 5) < 0 ) ;err_sys (« erreur de listen» ) ;

for ( ; ; ) {

newsockfd = accept ( sockfd, .....) ;

if ( newsockfd < 0) err_sys( «erreur de accept») ;

if ( fork() == 0 ) {

close ( sockfd ) ;

execute_la_demande( newsockfd ) ;

exit (1) ;

}

close ( newsockfd ) ;

}

Page 33: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

33

L’interface Socket gestion de noms

• Les primitives gethostname et sethostname

– Dans le monde UNIX, la primitive gethostname permet aux processus utilisateurs d’accéder au nom de la machine locale.

– D’autre part, la primitive sethostname permet à des processus privilégiés de définir le nom de la machine locale.

• La primitive getpeername

– Cette primitive est utilisée afin de connaître le point de terminaison du distant.

– Habituellement, un client connaît le point de terminaison (couple port/adresse IP) puisqu’il se connecte à ce serveur distant; cependant, un serveur qui utilise la primitive accept pour obtenir une connexion, a la possibilité d’interroger le socket afin de déterminer l’adresse du distant.

• La primitive getsockname

– Cette primitive rend le nom associé au socket qui est spécifié en paramètre.

Page 34: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

34

L’interface Socketgestion de noms

• Lorsque ces fonctions sont exécutées sur des machines ayant accès à un serveur de noms de domaines, elles fonctionnent elles-mêmes en mode client/serveur en émettant une requête vers le serveur de nom de domaines et attendent la réponse.

• Lorsqu’elles sont utilisées sur des machines qui n’ont pas accès à un serveur de noms, elles obtiennent les informations à partir d’une base de données ( simple fichier) locale.

• gethostbyname spécifie un nom de domaine et retourne un pointeur vers une structure hostent qui contient les informations propres à ce nom de domaine.

• gethostbyaddr permet d’obtenir les mêmes informations à partir de l’adresse spécifiée.

• getnetbyname spécifie un nom de réseau et retourne une structure netent renseignant les caractéristiques du réseau.

• getnetbyaddr spécifie une adresse réseau et renseigne la structure netent

Page 35: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

35

L’interface Socket fonctions de service

• Les fonctions getprotobyname et getprotobynumber– Dans la base de données des protocoles disponibles sur la

machine, chaque protocole a un nom officiel, des alias officiels et un numéro de protocole officiel.

– La fonction getprotobyname permet d’obtenir des informations sur un protocole donné en spécifiant son nom; renseigne la structure protoent.

– La fonction getprotobynumber permet d’obtenir les mêmes informations en spécifiant le numéro de protocole.

• La fonction getservbyname– Certains numéros de ports sont réservés pour les services

s’exécutant au-dessus des protocoles TCP et UDP.– getservbyname retourne les informations relatives à un service

donné en spécifiant le numéro du port et le protocole utilisé; renseigne la structure servent.

Page 36: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

36

L’interface Socket Byte ordering

• TCP/IP spécifie une représentation normalisée pour les entiers utilisés dans les protocoles. Cette représentation, appelée network byte order, représente les entiers avec le MSB en premier.

• Une application doit renseigner certaines informations du protocole et par conséquent, doit respecter le network informations byte order; Exemple le numéro de port.

• Pour que les applications fonctionnent correctement, elles doivent translater la représentation des données de la machine locale vers le network byte order : – htonl : host to network long : convertit une valeur sur 32 bits de la

représentation machine vers la représentation réseau.– htons : host to network short : convertit une valeur sur 16 bits de la

représentation machine vers la représentation réseau.– ntohl : network to host long : convertit une valeur sur 32 bits de la

représentation réseau vers la représentation machine.– ntohs : network to host short : convertit une valeur sur 16 bits de la

représentation réseau vers la représentation machine.

Page 37: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

37

Sockets en JAVA• Les classes java.net.Socket et java.net.ServerSocket sont les deux classes

de base pour l'implantation des sockets TCP/IP sous JAVA.• 7 opérations élémentaires sont assurées par un Socket :

– connexion à une machine distante (Socket),– envoi de données (Socket),– réception de données (Socket),– fermeture d'une connexion (Socket),– attachement à un port (ServerSocket),– attente de demande de connexion émanant de machines distantes

(ServerSocket),– acceptation de demandes de connexion sur le port local (ServerSocket).

• La Socket est créée sur le client.• Le ServerSocket fonctionne sur le serveur en attente de connexion

(méthode accept()) ;• La nouvelle Socket tente de se connecter sur le serveur distant.• Après détection d'ouverture de connexion, le ServerSocket génère une

Socket pour communiquer avec le client.• Une fois la connexion établie, les systèmes locaux et distant établissent un

canal de communication par flux à partir de leurs Sockets de manière à échanger des données.

• Lorsque les échanges sont terminés, l'un des interlocuteurs clôt la communication.

Page 38: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

38

Le client

• public Socket(String host, int port) throws UnknownHostException,IOException

• public Socket(InetAddress address, int port) throws IOException• public Socket(String host, int port, InetAddress localAddr, int

localPort) throws IOException• public Socket(InetAddress address, int port, InetAddress localAddr,

int localPort) throws IOException– Toutes ces fonctions génèrent une IOException en cas de problème à

l'exécution.• host (String) : nom de la machine vers laquelle la socket est créée.• addresse (InetAddress) : adresse IP de la machine vers laquelle la

socket est créée.• port (int) : numéro du port sur lequel la socket est créée.• localAddr (InetAddress) : adresse IP locale auquelle la socket est

associée.• localPort (int) : numéro du port local auquel la socket est associée.

Page 39: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

39

Quelques fonctions utiles

Les fonctions qui sont asociee au socket• public void close() throws

IOException : ferme la socket• public inputStream getInputStream()

throws IOException : retourne le flux d'entrée associé à la socket

• public outputStream getOutputStream() throws IOException : retourne le flux de sortie associé à la socket

Page 40: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

40

Le serveur• ServerSocket permet l'instanciation de variables implantant des

écouteurs de ports TCP/IP pour la détection de requêtes d'ouverture de Socket (sur les serveurs). Cette classe ouvre une socket sur le client correspondant.

• Constructeur :– public ServerSocket(int port) throws IOException– Toutes ces fonctions génèrent une IOException en cas de problème à

l'exécution.– port (int) : numéro du port sur lequel le ServerSocket est créé et mis en

attente.• Quelques fonctions utiles:

– public void close() throws IOException : ferme le ServerSocket– public Socket accept() throws IOException : place le ServerSocket

en attente de requête d'ouverture de sockette. Cette attente est bloquante. Une sockette est automatiquement générée et retournée lors de cette requête.

Page 41: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

41

Le IO• Stream : Objet JAVA possédant la caractéristique de pouvoir

envoyer ou recevoir des données • Java.io est le package dédié à la gestion des entrées/sorties. Il

intègre des classes de gestion de fichier au sens classique du terme.

• Outre ces classes, le package java.io possède un nombre important de classes dédiées à la gestion des flux de données. Les classes de base de java.io sont :– InputStream pour gérer des données en entrée (lecture),– OutputStream pour gérer des données en sortie (écriture).– Ces deux classes abstraites ne sont pas utilisées directement mais

plutôt comme intermédiaires vers des sous-classes correspondant mieux à la finalité désirée.

• Ces autres classes de gestion de flux de java.io ont pour but de réaliser le formatage automatique des données (type de valeur, manière avec laquelle les données sont transmises, ...) vers le type le plus adapté à l'application souhaitée.

Page 42: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

42

exemple

• Socket s ;String hote = "raphaello.univ-fcomte.fr" ;int port = 5555 ;try {  s = new Socket(hote,port) ;  OutputStream os = s.getOutputStream() ;  DataOutputStream dos =                new DataOutputStream(os) ;  ...  dos.close() ;}catch ( UnknownHostException e) { } ;catch ( IOException e) { } ;

Page 43: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

43

Le Stream

• Exemples de sous-classes de InputStream et OutputStream

– BufferedReader : Lecture de texte depuis un flux d'entrée caractère -> caractères, tableaux et chaînes de caractères.

– BufferedWriter : Ecriture de texte dans un flux de sortie caractère -> caractères, tableaux et chaînes de caractères.

– DataInputStream : Lecture de données Java primitives.– DataOutputStream : Ecriture de données Java primitives.– FileInputStream : Lecture d'octets depuis un fichier.– FileOutputStream : Ecriture d'octets dans un fichier.– ObjectInputStream : Lecture d'objets Java par desérialisation.– ObjectOutputStream : Ecriture d'objets Java par sérialisation.

Page 44: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

44

Les Threads• Thread : Objet JAVA possédant la caractéristique de pouvoir

s'exécuter en parallèle au programme qui lui a donné naissance (processus léger) Caractéristiques :– Gestion par le système de l'attribution des temps de calcul aux

Threads en cours d'exécution– Partage de la même zone mémoire que le programme de naissance

-> mémoire partagée– Ecriture d'une classe thread :

• Extension de la classe java.lang.Thread• Surcharge de la méthode public void run() avec une fonction

implantant l'équivalent de la fonction main pour un programme classique

• Emploi d'une instance de classe thread :• Instanciation d'une variable de la classe étendant Thread• Exécution de la méthode start héritée de Thread

• Emploi de threads -> problème de synchronisation lors de l'accès de deux ou plusieurs threads à la même zone de mémoire partagée

Page 45: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

45

Exemple • public class MyThread extends Thread {

  private boolean ok = true ;

  public void run() {    while ( ok ) {      ...      }    }

  public void arret() {    ok = false ;     }  }

... MyThread th = new Thread() ; th.start() ; ... th.arret() ; ...

Page 46: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

46

Les problèmes de synchronisation

• Emploi de threads -> problème de synchronisation lors de l'accès de deux ou plusieurs threads à la même zone de mémoire partagée

• Utilisation de la directive synchronized pour créer des blocs d'instructions ne pouvant être interrompus Synchronisation sur deux types d'éléments de code :

• Exemple : • public synchronized void set(int xx,int yy){

  cx = xx ;  cy = yy ;  }

• Lorsqu'un code exécuté dans un Thread essaie de lancer une fonction synchronisée d'un objet, il est bloqué tant que cet objet n'est pas relaché (si celui-ci est utilisé par ailleurs).

Page 47: 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

47

Exemple de sockets java