• Aucun résultat trouvé

Toutes Nom du fichier ”semaphore.h” Type de la donn´ee sem t Initialisation int sem init(sem t *sem, int ppartage, unsigned valeur)

N/A
N/A
Protected

Academic year: 2022

Partager "Toutes Nom du fichier ”semaphore.h” Type de la donn´ee sem t Initialisation int sem init(sem t *sem, int ppartage, unsigned valeur)"

Copied!
4
0
0

Texte intégral

(1)

Ens.: MTB & AO

Facult´e des sciences de tunis - Dept. Informatique

Travaux pratiques en synchronisation Ann´ee : 2013-2014 TP N1 - Communication interprocessus (Processus l´eger et s´emaphores)

Ce second TP est d´edi´e `a l’introduction de la communication entre les processus. Un int´erˆet particulier sera apport´e `a l’utilisation des s´emaphores. Aussi, les processus l´egers (i.e. threads) seront utilis´es pour mettre en œuvre cette communication.

1. Introduction de la biblioth`eque ”semaphore.h” de POSIX

Le tableau1 ci-dessous pr´esente un r´esum´e du contenu de la biblioth`eque ”semaphore.h”. Toutes Nom du fichier ”semaphore.h”

Type de la donn´ee sem t

Initialisation int sem init(sem t *sem, int ppartage, unsigned valeur);

int sem destroy(sem t *sem);

Op´erations int sem wait(sem t *sem);

Semaphore int sem post(sem t *sem);

int sem trywait(sem t *sem);

Compilation cc nomFichier.c -o nomExec -lrt Table 1: R´esum´e du fichier ”semaphore.h”

les fonctions ci-dessus retournent ”-1” pour indiquer une erreur.

La fonction ”sem init” initialise le s´emaphore avec la valeur contenue dans le param`etre

”valeur”. Ce parapm`etre ne peut pas ˆetre n´egatif. Si la valeur du param`etre ”ppartage” n’est pas 0, le semaphore peut ˆetre partag´e par plusieurs processus (i.e. le processus qui l’initialise et ses fils). Sinon, il ne peut ˆetre utilis´e que par les processus l´eger associ´es au processus qui l’a initialis´e.

La fonction ”sem wait” v´erifie la valeur du s´emaphore. Si elle est ´egale `a 0, elle bloque le processus demandeur et d´ecr´emente la valeur.

”sem trywait” est similaire `a la fonction pr´ec´edente sauf qu’au lieu de bloquer le processus lorsqu’elle d´ecr´emente une valeur ´egale `a 0, elle retourne -1.

”sem post” permet d’incr´ementer le s´emaphore et de lib´erer un processus bloqu´e dans le cas o`u la valeur est positive.

Remarque :

La cr´eation d’un processus l´eger (i.e. thread) se fait par l’appel `a la fonction :

”int pthread create(pthread t *tid,

const prthread attr t *tattr, void*(*routine dem)(void*), void *arg)”

de la bibilioth`eque ”pthread.h”.

Le premier param`etre peremet de pr´eciser le nom du processus l´eger. Le second param`etre peremt de pr´eciser les attributs d’un thread, par exemple, sa priorit´e, la taille de sa pile, etc.

Le troisi`eme param`etre fixe le traitement associ´e au thread, c’est un pointeur de fonction. Le dernier param`etre est pass´e au pointeur de fonction comme premier argument.

(2)

TPs en synchronisation TP1 Ann´ee universitaire : 2012-2013 2. Utilisation des processus l´egers

Soit le programme du listing1 suivant :

Listing 1: processusLegers.c

1#include <s t d i o . h>

#include <s t d l i b . h>

3#include <p t h r e a d . h>

/∗ V a r i a b l e s g l o b a l e s ∗/

5 i n t x = 0 ;

/∗ F o n c t i o n a a s s o c i e r au t h r e a d∗/

7 void ∗m a f o n c t i o n (void ∗a r g ) {

9 p r i n t f ( ” Xthread = %d\n” , x ) ; }

11 i n t main ( ){ p t h r e a d t t h r e a d ;

13 i f ( p t h r e a d c r e a t e (& t h r e a d , NULL, m a f o n c t i o n , NULL) < 0 ) { p e r r o r ( ” E r r e u r : l e t h r e a d n ’ e s t pas c r e e e ” ) ;

15 e x i t ( 1 ) ; }

17 /∗ r e a l i s a t i o n d ’ un t r a i t e m e n t ∗/ x = 5 5 ;

19 p r i n t f ( ”Xmain = %d\n” , x ) ; return( 0 ) ;

21 }

(a) Compiler le programme et donner le r´esultat de son ex´ecution.

(b) Mettre l’instruction suivante `a la ligne 20 du listing1 :

”ptread join(thread,NULL);”.

Quel est le r´esultat de l’ex´ecution du programme ?

(c) Refaire la mˆeme chose que dans la question pr´ec´edente en mettant ”ptread join” `a ligne 17 du listing1. Quel est le r´esultat de l’ex´ecution du programme ?

(d) Interpr´eter le r´esultat des trois questions pr´ec´edentes et pr´eciser le rˆole de la fonction

”ptread join”.

3. Cr´eation de plusieurs processus l´egers Soit la fonction du listing2 suivant :

Listing 2: multiLeger.c

1 void ∗maFonction2 (void ∗ a r g ){

i n t i ;

3 f o r ( i = 0 ; i < 5 ; i ++) {

p r i n t f ( ” Thread %s : %d\n” , (char∗) arg , i ) ;

5 s l e e p ( 1 ) ; }

7 p t h r e a d e x i t ( 0 ) ; }

Page 2

(3)

TPs en synchronisation TP1 Ann´ee universitaire : 2012-2013 (a) Proposer un programme qui permet de retourner le r´esultat suivant :

Thread 1: 0 Thread 2: 0 Thread 1: 1 Thread 2: 1 Thread 1: 2 Thread 2: 2 Thread 1: 3 Thread 2: 3 Thread 1: 4 Thread 2: 4

4. Utilisation des s´emaphores Soit le code du listing3 suivant :

Listing 3: sem1.c

#include <s t d i o . h>

2#include <s t d l i b . h>

#include <p t h r e a d . h>

4#include <semaphore . h>

/∗ G l o b a l v a r i a b l e s ∗/

6 i n t x = 0 ; s e m t s y n c ;

8 /∗ F o n c t i o n a a s s o c i e r au t h r e a d∗/ void ∗m a f o n c t i o n (void ∗a r g )

10 {

p r i n t f ( ” Xthread = %d\n” , x ) ;

12 s e m p o s t (& s y n c ) ; }

14 i n t main ( ){ p t h r e a d t t h r e a d ;

16 /∗ C r e a t i o n du semaphore s y n c i n i t i a l i s e a 0 ∗/

i f ( s e m i n i t (& sync , 0 , 0 ) == −1) {

18 p e r r o r ( ”Ne p e u t pas i n i t i a l i s e r l e semaphore ” ) ; e x i t ( 2 ) ;

20 }

i f ( p t h r e a d c r e a t e (& t h r e a d , NULL, m a f o n c t i o n , NULL) < 0 ) {

22 p e r r o r ( ” E r r e u r : l e t h r e a d n ’ e s t pas c r e e e ” ) ; e x i t ( 1 ) ;

24 }

s e m w a i t (& s y n c ) ;

26 /∗ r e a l i s a t i o n d ’ un t r a i t e m e n t ∗/ x = 5 5 ;

28 p r i n t f ( ”Xmain = %d\n” , x ) ;

/∗ d e s t r u c t i o n du semaphore s y n c ∗/

30 s e m d e s t r o y (& s y n c ) ; return( 0 ) ;}

Page 3

(4)

TPs en synchronisation TP1 Ann´ee universitaire : 2012-2013 (a) Quel est le r´esultat de l’ex´ecution du code du listing3 ?

(b) Changer le code du listing3 pour que le programme principal r´ealise son traitement en premier lieu.

Page 4

Références

Documents relatifs

AMPLIFIERS· ISOPLANAR· TTL· LINEAR ECL • DIODES· SSI. DIGITAL· LEDS • RTL DTL • TRANSISTORS· ZENERS • FLIP-FLO PS • INTERFACE· ROMS· RAMS· POWER VOLTAGE

FTM Technologies, fabricant, possède une longue expérience de l'équipement des ateliers d'électronique et d'une façon plus générale de l'industrie.. Nos matériels et outillages

ATSEM Groupe n°2 Manipuler de la pâte modeler pour créer formes simples (boules,.. boudins…)

La moisson est abondante … Dans cette première quinzaine de février, avec l’EAP, nous souhaitons recruter des paroissiens pour la visite à domicile des personnes malades

Attention les forces de plus grande valeur doivent avoir des longueurs plus grandes.. Calculer l’accélération du véhicule durant la

[r]

30 Pour en finir avec l'hégémonie du lien économique Michel

Ou'ellesoit traditionnelle[savou-. reuxagneauetsa sauceà la menthe, fameuxpoissonpanéaccompagné de ses frites emballéesdans un vieux i DailyTelegraph...) ou moderne!plon-.. 1