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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| #include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
/*globales*/
pthread_mutex_t mon_mutex = PTHREAD_MUTEX_INITIALIZER;
int i,g,a;
void *mon_thread(void *arg)
{
// pthread_mutex_init(&mon_mutex,NULL);
// pthread_mutex_lock(&mon_mutex);
int i = (int) arg;
printf("je suis le DEUXIEME thread, j'ai besoin de 2 secondes pr calculer\n");
sleep(2);
i=i+15;
g=i;
printf("j'ai fini mon calcul: i vaut %d, je rends la main\n",i);
// pthread_mutex_unlock(&mon_mutex);
return (void*)i;
pthread_exit(NULL);
}
int main(void)
{
int retour;
pthread_t thread;
// pthread_mutex_init(&mon_mutex,NULL);
//lancer premier thread, faire 5 calculs
//mettre premier thread en pause
//lancer second thread, faire calcul avec valeur du 1er thread
//arreter 2eme thread
//relancer premier thread avec valeur calcul 2nd thread
//1er argument: passage par adr de l'identifiant du thread
//2eme argument: designe attributs du thread, null = defaut
//3eme argument: pointeur sur la fct a executer ds le thread
//4eme argument: est l'argument de la fct thread
for (i=0;i<30;i++)
{
printf("valeur de i: %d\n",i);
if(i==5)
{
printf("le thread 1 s'endort et passe la valeur de i au thread 2\n");
pthread_create(&thread, NULL, mon_thread, (void*)i);
// pthread_mutex_lock(&mon_mutex);
pthread_join(thread, (void**)retour);
// pthread_mutex_unlock(&mon_mutex);
printf("i = %d\n g= %d\n",i,g);
printf("retour: %d",retour);
printf("continuons maintenant avec la nouvelle valeur de i qui vaut: %d\n",i);
}
}
return 0;
} |
Partager