• Aucun résultat trouvé

!s 2&0} 201‚13&2&~)3ƒ ))F2&&€~)F„…&‚&2&amp

N/A
N/A
Protected

Academic year: 2022

Partager "!s 2&0} 201‚13&2&~)3ƒ ))F2&&€~)F„…&‚&2&amp"

Copied!
6
0
0

Texte intégral

(1)

798;:<=2>@?BA;C(DFEHGI=JIKL>NM;CODPQ=D!CSRTMUE,R

VXWZY\[^]_`ba

c@ded af

c@ded@g

hjikmlnpo3qi!r

\&0 )&013s*" tu*"v.w"* !"53x*x"*&2yz46Hs2y 20{|s 2&0}0 1313~u{13s"*s€& !s 2&0} 201‚13&2&~)3ƒ

))F2&&€~)F„…&‚&2&‚„…†ˆ‡‰!ŠŒ‹F!‰%‹FŽ„"*sy 0

‘“’Xin\”–•”—iL˜ ™Iš@›”Œn\œkmi!›ˆOlHO•žŸ›¡ £¢¤q›¡”—ž¥k§¦¨Oi!q|nZ¦lŸnB¦©q¨rO•i!q¨nprªO«|n\i!lŸ r

Œ) * Œ¥s 2&0} 20131‚–46) —¬2y 20(p"*(.wp*) 1‚6 pˆ1‚­13–)&13s ®¤€46S#¯°6±~³²FŒ‰!1´ 4µ

0&ۦ

· MAIN : compteur = 0

¸ Thread 0 : compteur = 1

¹ Thread 0 : compteur = 2

º Thread 0 : compteur = 3

» Thread 0 : compteur = 4

¼ Thread 1 : compteur = 5

½ Thread 0 : compteur = 6

¾ Thread 0 : compteur = 7

¿ Thread 0 : compteur = 8

·…À Thread 2 : compteur = 9

·-· Thread 0 : compteur = 10

·$¸ Thread 1 : compteur = 11

·$¹ Thread 0 : compteur = 12

·wº Thread 0 : compteur = 13

·$» Thread 0 : compteur = 14

·-¼ ...

·-½ ...

· #include <pthread.h>

¸ #include <stdio.h>

¹ #include <stdlib.h>

º #include <string.h>

» #include <unistd.h>

¼½

¾ #define NB_THREADS 5

¿

·…À void * fn_thread (void * numero);

·-·

(2)

·$¸ static int compteur = 0;

·$¹

·wº int main (void)

·$» {

·-¼ pthread_t thread [NB_THREADS];

·-½ int i;

·$¾ int ret;

·…¿

¸À for (i = 0; i < NB_THREADS; i++)

¸· {

¸-¸ if ((ret = pthread_create ( & thread[i], NULL, fn_thread, (void *) i)) != 0)

¸-¹ {

¸…º fprintf(stderr,"pthread_create %s", strerror(ret));

¸-» exit(-1);

¸¼ }

¸½ }

¸-¾

¸¿ while (compteur < 40)

¹À {

¹· fprintf(stdout, "MAIN : compteur = %d \n", compteur);

¹-¸ sleep(1);

¹-¹ }

¹…º

¹-» for (i = 0; i < NB_THREADS; i++)

¹¼ {

¹½ pthread_join ( thread[i], NULL);

¹-¾ }

¹¿

ºÀ return(0);

º2·

º¤¸ }

º¤¹

º-º

º¤» void * fn_thread(void * num)

º2¼ {

º2½ int numero = (int) num;

º¤¾

º¿ while (compteur <40)

»À {

»· usleep ( numero * 100000);

»-¸ compteur ++;

»-¹ fprintf (stdout, "Thread %d : compteur = %d \n", numero, compteur);

»…º }

»-»

»¼ pthread_exit(NULL);

»½

»-¾ }

(3)

Ã,ikmiËʟinprO•žŸ›

‰!s 2Ÿ"\{ )5)¥s )6F,s &0} F"‚)&013s2 ,s0 FÌ130sy& ~Í Î ,&0I./&)Ï2&1‚6H¯|"

5"5ˆ 0)~‹¥#*) 1‚6 "*Ÿ)&1‚s 4–®¤€46S#¯ Á ±~

· #include <pthread.h>

¸ #include <stdio.h>

¹ #include <stdlib.h>

º #include <string.h>

» #include <unistd.h>

¼½

¾ #define NB_THREADS 5

¿

·…À void * fn_thread (void * numero);

·-·

·$¸ static int compteur = 0;

·$¹ pthread_mutex_t mutex_cpt = PTHREAD_MUTEX_INITIALIZER;

·wº

·$» int main (void)

·-¼ {

·-½ pthread_t thread [NB_THREADS];

·$¾ int i;

·…¿ int ret;

¸À

¸· for (i = 0; i < NB_THREADS; i++)

¸-¸ {

¸-¹ if ((ret = pthread_create ( & thread[i], NULL, fn_thread, (void *) i)) != 0)

¸…º {

¸-» fprintf(stderr,"pthread_create %s", strerror(ret));

¸¼ exit(-1);

¸½ }

¸-¾ }

¸¿

¹À while (compteur < 10)

¹· {

¹-¸ fprintf(stdout, "MAIN : compteur = %d \n", compteur);

¹-¹ sleep(1);

¹…º }

¹-»

¹¼ for (i = 0; i < NB_THREADS; i++)

¹½ {

¹-¾ pthread_join ( thread[i], NULL);

¹¿ }

ºÀ

º2· fprintf(stdout, "MAIN : je me termine\n", compteur);

º¤¸

º¤¹ return(0);

º-º

º¤» }

º2¼

º2½

(4)

º¤¾ void * fn_thread(void * num)

º¿ {

»À int numero = (int) num;

»·

»-¸ while (compteur <10)

»-¹ {

»…º pthread_mutex_lock(& mutex_cpt);

»-» sleep (( numero+1) * 2);

»¼ compteur ++;

»½ fprintf (stdout, "Thread %d : compteur = %d \n", numero, compteur);

»-¾ pthread_mutex_unlock(& mutex_cpt);

»¿ sleep(1);

¼…À }

¼-·

¼$¸ pthread_exit(NULL);

¼$¹

¼wº }

‘“’Xin\”–•”—iÒÑ ™;ÓԝSOi!›ˆOiÕ¦lŸnZ”—žŸ›¨ •O•žŸ›

Ö ×&0y€¨*1¥"* ‚×s &}0 1313´}0 6¥×x0 }0~('(‚ؐˆ×x0 }´ˆ&06 2|46"& 2246X"5

4662Ù2¥0u6F) 2Ù2*46~Œ) * 2Is 2&0}0 1313H"*0Ú06{y 0~'S¥s 13 *""* ‚"*´4602Ù2

¨x 2 }0~ۖ""*„-)e¤! 2s 26Fs€ I)&1‚s —*) 1‚6,&H"*!)&~'S& 2246"*)&1‚s

2 2Š¯F¬t*"0.w0p"50)y ("60St\s€& O)"5s 2* ("*–)&0H2y 20S~'(–)&H}0z Œ"* 0~+-"uOx"&46S®¤€46S#¯

)46H"*,s 1‚* "*S}"*,46"e.w0!&0u 2 "*—Ø~!*"** !s@&0 !)"5ˆ"*–./&)Ï2&sy 0v‡)&0v‡!ܖ

s2y 0v‡)&0S‡*}00"$~

· #include <pthread.h>

¸ #include <stdio.h>

¹ #include <stdlib.h>

º #include <string.h>

» #include <unistd.h>

¼½

¾ #define NB_THREADS 5

¿

·…À void * fn_surveille (void * numero);

·-· void * fn_vannes (void * numero);

·$¸

·$¹ static int compteur = 0;

·wº

·$» pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

·-¼ pthread_cond_t condition_alrm= PTHREAD_COND_INITIALIZER;

·-½

·$¾ int main (void)

·…¿ {

¸À pthread_t thread [2];

¸· int i;

¸-¸ int ret;

¸-¹

¸…º pthread_create (& thread[0], NULL, fn_vannes, (void*)0);

(5)

¸-» pthread_create (& thread[1], NULL, fn_surveille, (void*)1);

¸¼ pthread_exit(NULL);

¸½

¸-¾ return(0);

¸¿

¹À }

¹·

¹-¸ void * fn_surveille (void * num)

¹-¹ {

¹…º int numero = (int) num;

¹-» int i;

¹¼

¹½ fprintf(stdout,"SURV : debut\n");

¹-¾

¹¿ for (i = 0; i<5;i++)

ºÀ {

º2· fprintf(stdout,"SURV : %d\n",i);

º¤¸ for (compteur = 0; compteur < 5;compteur++)

º¤¹ {

º-º fprintf(stdout,"SURV : cpt = %d\n",compteur);

º¤» if (compteur == 4)

º2¼ {

º2½ fprintf(stdout,"SURV : je vais demander ouverture vannes\n");

º¤¾ pthread_mutex_lock(& mutex);

º¿ pthread_cond_signal (&condition_alrm);

»À pthread_mutex_unlock(& mutex);

»· sleep(2);

»-¸ }

»-¹ sleep(1);

»…º }

»-» }

»¼ fprintf(stdout,"surv : fin\n");

»½ pthread_exit(NULL);

»-¾

»¿ }

¼…À

¼-· void * fn_vannes (void * num)

¼$¸ {

¼$¹ int numero = (int) num;

¼wº int i;

¼$»

¼-¼ for (i = 0; i<5;i++)

¼-½ {

¼$¾ pthread_mutex_lock(& mutex);

¼…¿ pthread_cond_wait (&condition_alrm, &mutex);

½…À pthread_mutex_unlock(& mutex);

½-· fprintf(stdout,"VANNES: J ouvre les vannes\n");

½$¸ compteur =0;

½$¹ }

½wº fprintf(stdout,"VANNES : fin\n");

½$» pthread_exit(NULL);

½-¼

½-½ }

(6)

‘“’Xin\”–•”—iÒÑ ™^ÝUnp•ßÞ¨q¨rO•žŸ›

‰!s 2F"#{ )5)H2 vs0 ./&S~'à00s !s€& !"*F2 20Ù2 !s &}0 131´Ø*&0|1¥"„$2y 20S~

Références