Bonsoir,

J'ai voulu utiliser les fonctions pthread_setspecific() et pthread_getspecific() afin de pouvoir transférer des données d'un thread à un autre, mais je n'arrive pas à les utiliser, je crée deux thread, l'un dans lequel je place les données avec pthread_setspecific() et l'autre dans lequel je tente de les récupérer, seulement il me retourne toujours 0..

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
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
 
void * fonction (void * arg);
 
pthread_key_t	key;
 
int main(){
	pthread_t 	pth;
	int 		i;
 
	pthread_key_create(& key, free);
	for(i = 0; i < 2; i++){
		if(pthread_create(& pth, NULL, fonction, (void *) i) != 0){
			perror("pthread_create");
			exit(EXIT_FAILURE);
		}
	}
	/*	Processus père		*/
 
	while(1)	sleep(1);
}
 
void * fonction(void * arg){
	int		i = (int)arg;
	int		j = 4;
	int		data;
 
	switch(i){
		case 0:
			while(1){
				pthread_setspecific(key, j);
				sleep(1);
			}
			break;
		case 1:
 
			while(1){
				data = (int)pthread_getspecific(key);
				printf("data = %d\n", data);
				sleep(1);
			}
			break;
	}
 
	pthread_exit(NULL);
}
En utilisant pthread_getspecific() dans le même thread que celui ou j'utilise pthread_setspecific(), ca marche sans problème, mais je vois plus tellement l'intérêt..