Bonjour,
Utilisant la librairie portable pthread:
http://emmanuel-delahaye.developpez....#helloworlds_1
J'ai voulu protégé le lancement de thread par une variable Status.
Bien qu'il s'agisse de code C++, je poste ceci sur ce forum car je considère que pthread est du C.
Le code d'appel est le suivant:
La protection par mutex est simple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 string run(const string action, char* strAutomat) { if (getStatus() != S_WORKING) { setStatus(S_WORKING); // Start Thread of opening pthread_t ta; pthread_create (&ta, NULL, staticOpenCall, strAutomat); } return status; }
Le mutex est correctement initialisé au démarrage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void setStatus(const string newStatus) { pthread_mutex_lock (&mutexStatus); status = newStatus; pthread_mutex_unlock (&mutexStatus); }
Le problème est que lorsque le thread se termine, il fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mutexStatus = PTHREAD_MUTEX_INITIALIZER;
(S_CLOSED n'est qu'une constante)
Code : Sélectionner tout - Visualiser dans une fenêtre à part setStatus(S_CLOSED);
Et là, lors de cette initialisation, j'ai une erreur d'accés mémoire dans la ligne
pthread_mutex_lock() de setStatus().
Il est à noter que cette fonction a été appelé précédement par Run() (voir plus haut) et que cela s'est bien passé.
Je suis sous Windows XP, avec VisualC++ 2005 Express, mais ceci ne devrait pas entrer en compte car je souhaite faire du code portable.
Merci
Partager