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:
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;
}
La protection par mutex est simple:
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 mutex est correctement initialisé au démarrage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
mutexStatus = PTHREAD_MUTEX_INITIALIZER;
Le problème est que lorsque le thread se termine, il fait :

(S_CLOSED n'est qu'une constante)

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