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} 20113&2&~)3
))F2&&~)F &&2& !F!%F"*sy 0
Xin\iL I@n\kmi!OlHO¡ £¢¤q¡¥k§¦¨Oi!q|nZ¦lnB¦©q¨rOi!q¨nprªO«|n\i!l r
) * ¥s 2&0} 2013146) ¬2y 20(p"*(.wp*) 16 p113)&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);
·-·
·$¸ 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);
»½
»-¾ }
Ã,ikmiËÊinprO
!s 2"\{ )5)¥s )6F,s &0} F")&013s2 ,s0 FÌ130sy& ~Í Î ,&0I./&)Ï2&16H¯|"
5"5 0)~¥#*) 16 "*)&1s 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½
º¤¾ 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ÒÑ ;ÓÔSOi!OiÕ¦lnZ¨ O
Ö ×&0y¨*1¥"* ×s &}0 1313´}0 6¥×x0 }0~('(Ø×x0 }´&06 2|46"& 2246X"5
4662Ù2¥0u6F) 2Ù2*46~) * 2Is 2&0}0 1313H"*0Ú06{y 0~'S¥s 13 *""* "*´4602Ù2
¨x 2 }0~Û""*-)e¤! 2s 26Fs I)&1s *) 16,&H"*!)&~'S& 2246"*)&1s
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);
¸-» 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);
½-¼
½-½ }
Xin\iÒÑ ^ÝUnpßÞ¨q¨rO
!s 2F"#{ )5)H2 vs0 ./&S~'à00s !s& !"*F2 20Ù2 !s &}0 131´Ø*&0|1¥"$2y 20S~