[C] Threads et variables

Threads et variables [C] - C - Programmation

Marsh Posté le 26-11-2004 à 13:23:01    

Bonjour
 
J'ai un probleme dans un programme écrit en C
 
J'ai dans mon main un pointeur (c'est une file)
Dans ce meme main je cré un thread en passant en parametre le pointeur (apres l'avoir alloué)
Dans le thread j'ajoute des elements a la file (ils sont bien ajouté dans le thread)
mais ensuite dans mon main la file est vide :D
 
Voici une partie des sources, vous comprendrez mieux ;)
 

Code :
  1. typedef struct Element
  2. {
  3. char *valeur;
  4. struct Element *suiv;
  5. }element ;
  6. typedef struct Fifo
  7. {
  8. element *debut;
  9. } fifo;


 
 

Code :
  1. fifo *sample;
  2. sample=(fifo*)malloc(sizeof(fifo));
  3. init_fifo(sample); //met sample->debut a NULL


 

Code :
  1. pthread_t adr_thread;
  2. if(pthread_create(&adr_thread,NULL,record,(void *)sample) !=0)
  3. {
  4. printf("Erreur de création de thread\n" );
  5. exit(-1);
  6. }
  7. sleep(3);
  8. if(pthread_cancel(adr_thread)==0)
  9. printf("Thread record arrété\n" );
  10. printf("%s\n",sample->debut); //cela m'affiche "NULL"


 
 
Je precise bien que le ppointeur de nom "debut" est modifié dans le thread et donc n'est plus NULL, ceci ayant bien lieu avant que "NULL" ne soit affiché


Message édité par ffomnislash le 26-11-2004 à 13:23:44
Reply

Marsh Posté le 26-11-2004 à 13:23:01   

Reply

Marsh Posté le 26-11-2004 à 15:22:11    

Tu compile bien avec une option de type "-mt" ou "-pthread" ou autres, pour dire à ton compilo de pas faire de suppositions sur l'aliasing et la volatilité ?
 
D'autre part, pourquoi ne fais tu pas un phtread_join (plutôt qu'un pthread_cancel qui est de très mauvais aloi) ?

Reply

Marsh Posté le 26-11-2004 à 15:36:54    

Je compile avec l'option "-lpthread"
 
Sinon je vais voir ce que fait exactement le join ;)

Reply

Marsh Posté le 26-11-2004 à 15:43:54    

ffomnislash a écrit :

Je compile avec l'option "-lpthread"


Ca suffit pas forcément, car seul ton linker sera au courant du fait que ton code est concurrent. Essaye avec "-pthread" (je crois que c'est comme ça sous Nilux).

Reply

Marsh Posté le 26-11-2004 à 16:39:05    

je viens de tester avec -pthread
je n'ai pas d'erreur mais le problême persiste :(
 
Je me demandais si ce ne serait pas plutot le thread qui recré ces propres variable, un peu comme avec un fork

Reply

Marsh Posté le 26-11-2004 à 16:43:10    

ffomnislash a écrit :


Je me demandais si ce ne serait pas plutot le thread qui recré ces propres variable, un peu comme avec un fork


Nope. Fais voir le code de ta fonction record à tout hasard.

Reply

Marsh Posté le 26-11-2004 à 16:59:26    

record fait un enregistrement depuis le micro alors je vais juste garder les parties en rapport.
 
Me voici de retour avec un peu de retard ;)
 
En faite j'ai résolue mon probleme
Cela n'avait rien a voir avec le thhread ;)
 
J'ajouter des elements dans ma file puis par la suite je la vidé
donc a la fin il n'y avait plus rien dedans :D


Message édité par ffomnislash le 26-11-2004 à 19:41:14
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed