c ++ multithread

J’utilise C ++ pour implémenter une classe de thread. Mon code montre ce qui suit. J’ai un problème pour accéder aux données du fil. Dans la classe Thread, je crée un thread qui utilise la fonction pthread_create (). puis il appelle la fonction EntryPoint () pour démarrer le fil créé. Dans la fonction Exécuter, je souhaite accéder à la variable masque, elle indique toujours une erreur de segment. Donc, ma question est de savoir si le nouveau fil créé copie les données dans la classe d’origine? Comment accéder aux données propres du fil?

class Thread { public: int mask; pthread_t thread; Thread( int ); void start(); static void * EntryPoint (void *); void Run(); }; Thread::Thread( int a) { mask =a; } void Thread::Run() { cout<<"thread begin to run" <<endl; cout << mask <<endl; // it always show segmentfault here } void * Thread::EntryPoint(void * pthis) { cout << "entry" <Run(); } void Thread::start() { pthread_create(&thread, NULL, EntryPoint, (void *)ThreadId ); pthread_join(thread, NULL); } int main() { int input_array[8]={3,1,2,5,6,8,7,4}; Thread t1(1); t1.start(); } 

Je ne connais pas bien les bibliothèques que vous utilisez, mais comment EntryPoint sait-il que pthis est un pointeur sur Thread? Thread (this) ne semble pas avoir été passé à pthread_create.

C’est bien que vous essayiez d’écrire une classe de fil à des fins éducatives. Cependant, si vous ne l’êtes pas, pourquoi réinventer la roue ?

En gros, le problème est que dès que vous démarrez votre thread, les exits principaux et que votre instance Thread locale sort de son périmètre. Ainsi, la durée de vie de votre object thread étant contrôlée par un autre thread, vous avez déjà introduit une condition de concurrence critique.

De plus, j’aimerais envisager de rejoindre un fil immédiatement après l’avoir créé dans Thread::start pour être un peu étrange.

C’est probablement NULL, vous devez vérifier que vous passez les arguments corrects à pthread_create.