Code cleanups.
[TD_SE.git] / threads / exemple1.c
CommitLineData
5dd7feaa
JB
1//exemple1.c
2
3#define _REENTRANT
4#include <pthread.h>
5#include <unistd.h>
6#include <stdlib.h>
7#include <stdio.h>
8
151a0f56 9static void afficher(int n, char lettre)
5dd7feaa
JB
10{
11 int j;
12 for (j = 1; j < n; j++) {
13 printf("%c", lettre);
14 fflush(stdout);
15 }
16}
17
151a0f56 18static void *threadA(void *inutilise)
5dd7feaa
JB
19{
20 afficher(100, 'A');
21 printf("\n Fin du thread A\n");
22 fflush(stdout);
23 pthread_exit(NULL);
24}
25
151a0f56 26static void *threadC(void *inutilise)
5dd7feaa
JB
27{
28 afficher(150, 'C');
29 printf("\n Fin du thread C\n");
30 fflush(stdout);
31 pthread_exit(NULL);
32}
33
151a0f56 34static void *threadB(void *inutilise)
5dd7feaa
JB
35{
36 pthread_t thC;
37 pthread_create(&thC, NULL, threadC, NULL);
38 afficher(100, 'B');
39 printf("\n Le thread B attend la fin du thread C\n");
40 pthread_join(thC, NULL);
41 printf("\n Fin du thread B\n");
42 fflush(stdout);
43 pthread_exit(NULL);
44}
45
46int main()
47{
48 pthread_t thA, thB;
49 printf("Création du Thread A\n");
50 pthread_create(&thA, NULL, threadA, NULL);
51 pthread_create(&thB, NULL, threadB, NULL);
52 sleep(1); // simule un traitement
53 printf("Le processus principal attend que les autres se terminent\n");
54 // attendre la fin des threads
55 pthread_join(thA, NULL);
56 pthread_join(thB, NULL);
57 exit(0);
58}