Вы находитесь на странице: 1из 5

Compte Rendu

Programmation Concurrentielle
tems rel avec POSIX
TP Systmes temps rel
TP n1 Sance 1

Omar Khayem Chrif
Mohamed Mhadhbi
Dhia Eddine Sghaier





RT 5 Gr3
2014 / 2015


Compte Rendu N1
Programmation Concurrentielle
temps rel avec POSIX
Travaux Pratiques
Systme temps Rel
2
I. Exercice 1.
1. Lexcution du code prsent dans le fascicule nous permet dobtenir le rsultat
suivant :














2. Lexcution du deuxime code fait apparaitre le rsultat suivant :



Le printf de la fonction Un_Thread ne saffiche pas. En effet, le rsultat affiche le message
de thread dernier. Ceci est expliqu par le fait que le thread principal nattend pas
automatiquement que le thread, Un_Thread, se termine avant lexcution de son code.
Pour que notre code fonctionne correctement il faut quon demande la prise en
considration de la fonction Un_Thread.
En utilisant la fonction pthread_join , on demande que le thread principal attende la fin
de lexcution du Un-thread .

OmarKhayem@omar_khayem_PC /
$ ./exec1
sh: clear : commande introuvable
1. Afficher la valeur
2. Quitter

Votre choix : 1
Valeur : 354534218

sh: clear : commande introuvable
1. Afficher la valeur
2. Quitter

Votre choix : 1
Valeur : 749774748

sh: clear : commande introuvable
1. Afficher la valeur
2. Quitter

Votre choix : 1
Valeur : 1166288436

sh: clear : commande introuvable
1. Afficher la valeur
2. Quitter

Votre choix : 1
Valeur : 1644247811

sh: clear : commande introuvable
1. Afficher la valeur
2. Quitter

Votre choix : 1
Valeur : 2000000000

sh: clear : commande introuvable
1. Afficher la valeur
2. Quitter

Votre choix : 2
Attente de la terminaison du thread

OmarKhayem@omar_khayem_PC /

OmarKhayem@omar_khayem_PC /
$ ./exp2 3
------ Thr (0x)80000038 (main) cree: (0x)a (i = 0)
------ Thr (0x)80000038 (main) cree: (0x)800101ec (i = 1)
------ Thr (0x)80000038 (main) cree: (0x)6102c2a4 (i = 2)
------main Fin de main (0x)80000038



Compte Rendu N1
Programmation Concurrentielle
temps rel avec POSIX
Travaux Pratiques
Systme temps Rel
3

















Le rsultat obtenu est alors :








#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXTHREADS 100

int main(int argc, char *argv[]) {

int i;

int NbThreads;

void Un_Thread (void);

pthread_t thr_main, threads[MAXTHREADS];

if (argc != 2) {
printf (" Usage : %s nbre-de -threads\n", argv[0]);
exit(1); }
NbThreads = atoi(argv[1]);

thr_main = pthread_self();

/*************************** creation des threads *************************/

for ( i = 0; i < NbThreads ; i++) {

pthread_create (&threads[i] ,NULL ,(void*)Un_Thread, NULL);

pthread_join(threads[i] ,NULL);

printf("------ Thr (0x)%x (main) cree: (0x)%x (i = %d)\n", (int)thr_main, (int)threads[i], i);

}
printf("------main Fin de main (0x)%x\n", (int)thr_main); return (0);
}

//----------------------------------- Un_Thread Fonction executee par les
//thread-----------------------------------------------------------------

void Un_Thread (void) {
pthread_t mon_tid;
int i;
mon_tid = pthread_self();

printf("Thread (0x)%x : CREE\n", (int)mon_tid);
srandom(time(NULL));
sleep (random()%3);
printf("Thread (0x)%x : DEBUT\n", (int)mon_tid);

for ( i = 0; i < 5 ; i++) {
sleep (random()%4);
printf("Thread (0x)%x : iteration %d \n", (int)mon_tid , i); }

printf("Thread (0x)%x : FIN\n", (int)mon_tid);
pthread_exit(NULL);
}



Compte Rendu N1
Programmation Concurrentielle
temps rel avec POSIX
Travaux Pratiques
Systme temps Rel
4
II. Exercice 2 :
Excutons tout dabord le code prsent dans le fascicule. Le rsultat obtenu est :
On remarque que les deux fonctions etoile et diese sexcutent successivement telle
qutait leurs ordres dans le code.
En se basant sur ce qui prcde dans le premier exercice, on changera notre code pour que
les deux fonctions etoile et diese sexcutent simultanment ou encore dune faon
parallle.
Pour aboutir au rsultat voulu, les deux fonctions seront attachs deux threads, qui seront
excuts paralllement, et on aura recours la fonction la fonction pthread_join .
Le nouveau code est : (Sauf le code de la fonction main est modifi)















#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <pthread.h>


void etoile (void);

void diese(void);


//==================================================

int main (void){


pthread_t tid1,tid2;

printf("je vais lancer les 2 fonctions \n");


pthread_create(&tid1, NULL, (void*)etoile, NULL);

pthread_create(&tid2, NULL, (void*)diese, NULL);


setbuf(stdout,NULL);

printf("je vais lancer les 2 fonctions \n");

//etoile();

//diese();



pthread_join(tid2, NULL);

pthread_join(tid1, NULL);

return EXIT_SUCCESS;
}


//===================================================


void etoile(void){

int i; char c1 = '*';

for (i=1;i<=200;i++)
{
write(1, &c1, 1);
}


return;
}

//========================================


void diese(void){


int i;
char c1 = '#';


for (i=1;i<=200;i++)
{
write(1, &c1, 1);
}


return;
}

//========================================



Compte Rendu N1
Programmation Concurrentielle
temps rel avec POSIX
Travaux Pratiques
Systme temps Rel
5
On vrifie le rsultat obtenu :

Вам также может понравиться