Systèmes d'Exploitation II - Travaux Dirigés II : Le Multithreading

Page 1 sur 2Lecteur de document UniversityLib

Systèmes d'Exploitation II - Travaux Dirigés II : Le Multithreading

Multithreading, Programming, Operating Systems · lab

Systèmes d'Exploitation II - 2

année Li en e

ème

Travaux Dirigés II : Le Multithreading

ESEN - Université de la Manouba

Amine DHRAIEF

Partie théorique

1. Qu'est e qu'un multithreading ? et quelle est la di(cid:27)éren e ave la multiprogrammation ?

2. Quelles sont les prin ipales similarités/di(cid:27)éren es entre un pro essus et un thread ? Dans

une appli ation qui partage des données en mémoire, faut-il privilégier les pro essus ou

les threads ?

3. Dé rire e qu'est un TCB (Thread Control Blo ) en vous inspirant du ontenu d'un PCB

(Pro ess Control Blo ou en ore un Des ripteur de Pro essus).

4. Considérez les deux mor eaux de ode suivants. Deux threads exé utent respe tivement

les fon tions writer_thread() et reader_thread(), et partagent la variable pointer.

int *pointer = NULL;

void * writer_thread() {

while (1) {

if (pointer == NULL) {

Publicité

pointer = mallo (sizeof(int));

*pointer = rand();

//fon tion dans stdlib.h pour re evoir une valeur aléatoire

}

}

}

void *reader_thread() {

while (1) {

if (pointer != NULL) {

printf("pointer = %d", *pointer);

free(pointer);

pointer = NULL;

}

}

}

(a) En exé utant le programme qui rée deux threads ayant les fon tions pré édentes,

une erreur "Erreur de segmentation" apparaît au bout d'un ertain temps. D'où

provient ette erreur ? Expliquer.

Partie pratique

Publicité

5. La réation et le lan ement du thread se fait par :

pthread_t th1 ;

int ret ;

pthread_ reate (&th1, NULL, runDuThread, "1");

if (th1 == NULL) {

fprintf (stderr, "pthread_ reate error 1") ; exit(0) ;}

Le thread exé utera alors la fon tion runDuThread dont le prototype est :

void runDuthread (void param) ;

Cette fon tion est à é rire par le programmeur pour dé rire le omportement du thread.

Le paramètre param est un pointeur dont la valeur est elle passée en argument (le 4ème)

de la fon tion pthread_ reate. Il permet de passer des données au thread.

Si la fon tion main se termine, le programme et tous les threads lan és se terminent

aussi. Il faut don s'assurer avant de terminer le programme que tous les threads ont (cid:28)ni

leur travail. L'attente de la terminaison d'un thread se fait omme e i :

(void) pthread_join (th1, (void *)&ret) ;

Le paramètre ret ontiendra la valeur retournée par la fon tion pthread_exit(int val)

à exé uter avant de terminer un thread.

(a) É rire un programme qui lan e 2 threads. L'un é rira les 26 minus ules à l'é ran et

l'autre les 26 ma jus ules.

Publicité

(b) É rire un programme qui initialise une variable globale à 0 et rée 2 threads. Cha un

des threads va in rémenter la variable N fois. A(cid:30) her la valeur de la variable à la

(cid:28)n de l'exé ution de ha un des threads.

La suite de Fibona i

6. La suite de Fibona i est une suite d'entiers dans laquelle haque terme est la somme

des deux termes qui le pré èdent : 0, 1, 1, 2, 3, 5, 8. Formellement, on exprime ette

suite omme suit :

fib[0℄=0

fib[1℄=1

fib[n℄=fib[n-1℄+fib[n-2℄

É rire un programme multithreadé qui génère la séquen e de Fibona i. Ce programme

devrait fon tionner omme suit : L'utilisateur saisira le nombre d'éléments de la suite de

Fibona i que le programme devra générer.

Le programme va alors réer un thread séparé qui va générer les nombres de Fibona i,

plaçant la séquen e dans une stru ture de données qui peut être partagées par les (cid:28)ls

(un tableau est probablement la stru ture de données la plus ommode).

Lorsque le thread termine son exé ution, la thread prin ipal a(cid:30) hera le résultat.

Page 2