hello!

je découvre la programmation système en C sous linux et pour mieux comprendre j'ai fait un bête programme (en C) mais je me suis un peu embrouillé et je n'y vois plus clair..

voici le code:

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
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;
 
 
 
}
mes questions sont les suivantes :

- comment renvoyer la nouvelle valeur de i à la fonction main?

- qu'en est-til du mutex? ou l'utiliser? dans quel cas?

- pq la fonction mon_thread me retourne la variable "retour" valant -1208480800