"erreur de segmentation" avec les threads sous linux en C++

"erreur de segmentation" avec les threads sous linux en C++ - C++ - Programmation

Marsh Posté le 15-12-2005 à 17:29:21    

Salut !
J'utilise pthread.h pour gérer les threads sous linux mais mon programme crash sur la fonction pthread_create et linux me dis "erreur de segmentation"

Code :
  1. pthread_create ( &threadId[_threadCounter], NULL, my_thread_process, (void*) "0" )


 
my_thread_process est ma méthode statique qui contient le code du thread. Auriez vous une idée d'où pourrait provenir l'erreur ? ou au pire une autre lib qui permette de gérer les threads sous linux ?

Reply

Marsh Posté le 15-12-2005 à 17:29:21   

Reply

Marsh Posté le 15-12-2005 à 18:12:47    

et sans le "0" ?
a quoi il sert ton "0" pas bo ?

Reply

Marsh Posté le 15-12-2005 à 19:13:37    

boost::thread :o

Reply

Marsh Posté le 16-12-2005 à 09:53:15    

bjone a écrit :

et sans le "0" ?
a quoi il sert ton "0" pas bo ?


 
c'est ce qui est passé en paramètre my_thread_process(void* arg) dans l'exemple que j'ai vu il font la même chose avec "1" ou "2", je sais pas quoi mettre a la place...

Reply

Marsh Posté le 16-12-2005 à 09:53:37    

Joel F a écrit :

boost::thread :o


 
c'est une lib ?

Reply

Marsh Posté le 16-12-2005 à 10:13:07    

oui

Reply

Marsh Posté le 16-12-2005 à 10:15:15    

TheShot a écrit :

c'est une lib ?


 
www.boost.org


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 16-12-2005 à 10:18:48    

TheShot a écrit :

c'est ce qui est passé en paramètre my_thread_process(void* arg) dans l'exemple que j'ai vu il font la même chose avec "1" ou "2", je sais pas quoi mettre a la place...


 
NULL ou 0 si tu t'en sers pas.
pas "0".

Reply

Marsh Posté le 16-12-2005 à 10:34:35    

bjone a écrit :

NULL ou 0 si tu t'en sers pas.
pas "0".


 
ça me met la même erreur  :(

Reply

Marsh Posté le 16-12-2005 à 10:52:51    

&threadId[_threadCounter]
tu es sur de ne pas faire de dépassement de tableau ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 16-12-2005 à 10:52:51   

Reply

Marsh Posté le 16-12-2005 à 11:06:50    

_threadCounter est initialisé a 0 dans le constructeur et le programme n'arrive pas au _threadCounter++.
Par contre my_thread_process est déclaré en static dans la classe et pas dans la définition, vous pensez que ça peut poser un problème ?
 

Code :
  1. while(1)
  2. {
  3.  _newSocket = accept(_mySocketServer, (struct sockaddr *)&_sockInfoClient, (socklen_t*) &_sockInfoClientSize);
  4.  cout<<"accept ok, newSocket = "<<_newSocket<<endl ;
  5.  if (_newSocket != -1)
  6.  {
  7.   if(pthread_create ( &threadId[_threadCounter], NULL, my_thread_process, NULL ) != 0)
  8.   {cout<< "erreur avec pthread_create "<<endl ;} //le quatrième paramètre est l'argument passé à  my_thread_process
  9.   _threadCounter++ ;
  10.   //we don't call CloseHandle(_semaphoreHandle) because we are in an infinite loop
  11.  }
  12. }

Reply

Marsh Posté le 16-12-2005 à 11:25:41    

et threadId est déclaré comment ? ton problème vient aussi peut-etre du code exécuté dans le nouveau thread


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 16-12-2005 à 11:33:34    

blackgoddess a écrit :

et threadId est déclaré comment ? ton problème vient aussi peut-etre du code exécuté dans le nouveau thread


 
j'ai fais :
pthread_t threadId[1000] ;
 
sinon j'ai mis tout le code a l'intérieur du thread en commentaire et ça fais la même chose

Reply

Marsh Posté le 16-12-2005 à 23:00:04    

up

Reply

Marsh Posté le 17-12-2005 à 03:10:53    

mmh je vois pas ... peux-tu poster le minimum de code qui reproduise ton problème, et qui forme une source compilable ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 18-12-2005 à 00:18:15    

TheShot a écrit :

_threadCounter est initialisé a 0 dans le constructeur et le programme n'arrive pas au _threadCounter++.
Par contre my_thread_process est déclaré en static dans la classe et pas dans la définition, vous pensez que ça peut poser un problème ?
 

Code :
  1. while(1)
  2. {
  3.  _newSocket = accept(_mySocketServer, (struct sockaddr *)&_sockInfoClient, (socklen_t*) &_sockInfoClientSize);
  4.  cout<<"accept ok, newSocket = "<<_newSocket<<endl ;
  5.  if (_newSocket != -1)
  6.  {
  7.   if(pthread_create ( &threadId[_threadCounter], NULL, my_thread_process, NULL ) != 0)
  8.   {cout<< "erreur avec pthread_create "<<endl ;} //le quatrième paramètre est l'argument passé à my_thread_process
  9.   _threadCounter++ ;
  10.   //we don't call CloseHandle(_semaphoreHandle) because we are in an infinite loop
  11.  }
  12. }



C'est juste pour l'exemple, ou tu incrémentes _threadcounter même si pthread_create foire ?  :??: Si tu vas dans le if de multiples fois, tu peux faire exploser ton tableau threadId.

Reply

Marsh Posté le 18-12-2005 à 20:37:04    

je pense que tu as raison, je vais essayer  :)

Reply

Sujets relatifs:

Leave a Replay

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