Bonjour,
Je débute avec la programmation concurrente et la bibliothèque pthread. Je programme en C sous Linux Ubuntu 6.06 (GCC version 4.0.3, kernel 2.6.15 sur un pentium IV 3.2 GHz monoprocesseur). Pour commencer avec cette bibliothèque, j'ai testé un bout de code trouvé sur le site web de Emmanuel Delahaye http://emmanuel-delahaye.developpez.com/pthreads.htm :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #include <stdio.h> #include <pthread.h> static void * task_a(void *p_data) { int i; for (i=0; i<10; i++){ printf("Hello world from A (%d)\n", i); } (void) p_data; return NULL; } static void * task_b(void *p_data) { int i; for (i=0; i<10; i++){ printf("Hello world from B (%d)\n", i); } (void) p_data; return NULL; } int main(void) { pthread_t ta; pthread_t tb; puts("Main init"); pthread_create(&ta, NULL, task_a, NULL); pthread_create(&tb, NULL, task_b, NULL); #if 1 pthread_join(ta, NULL); pthread_join(tb, NULL); #endif puts("Main end"); return 0; }
L'idée est ici simplement d'exécuter les tâches main(), task_a() et task_b() de manière concurrente et d'observer ce qui se passe. Voici le résultat que j'obtient:
Quelles que soit le nombre de répétitions de la boucle exécutée par les fonctions task_a() et task_b() (c'est à dire i=10, 100, 1000), j'obtient une exécution séquentielle des tâches. Avez-vous une idée de la raison pour laquelle je n'obtient pas une exécution concurrente des tâches dans l'exemple ci-dessus?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Main init Hello world from A (0) Hello world from A (1) Hello world from A (2) Hello world from A (3) Hello world from A (4) Hello world from A (5) Hello world from A (6) Hello world from A (7) Hello world from A (8) Hello world from A (9) Hello world from B (0) Hello world from B (1) Hello world from B (2) Hello world from B (3) Hello world from B (4) Hello world from B (5) Hello world from B (6) Hello world from B (7) Hello world from B (8) Hello world from B (9) Main end
Meilleures salutations et merci d'avance pour votre aide
Thierry
Partager