Ok voici le code complet :
Le fichier .h de la classe Bidule :
class Bidule {
private :
static Truc& getTruc() {
Truc *t = new Truc(5);
return *t;
}
static int& getIVar ();
static Truc &truc;
};
Le fichier .cpp de la classe Bidule :
Truc& Bidule::truc = getTruc();
int& Bidule::getIVar () {
return truc.getIVar();
}
Le fichier.h de la classe truc :
class Truc {
private:
int m_iVar;
public:
Truc (int iVar);
int& getIVar();
};
Le fichier .cpp de la classe Truc :
Truc::Truc(int iVar) : m_iVar(iVar) {
}
int& Truc::getTruc() {
return m_iVar;
}
Et le main :
Mutex mutex;
void threadFunc () {
//Problème : le mutex.lock ne marche pas, les autres thread ont accès à la variable iVar!
mutex.lock();
int& iVar = Bidule::getIVar();
mutex.unlock();
}
void main () {
Thread thread(&threadFunc);
thread.launch();
}
Voilà j'ai mis le code complet et le problème que j'ai en commentaire.
PS : je fais aussi des mutex.lock et unlock dans toutes les fonctions appelées par mes autres thread mais ça ne résouds pas le problème.
PS 2 : je ne sais pas vraiment si le soucis vient de la SFML car j'ai lu sur un autre forum que l'on ne pouvait pas faire ce genre de chose avec le c++98 (impossibilité donc de faire des singletons thread-safe.), mais que le problème serais réglé avec le c++11. (Que j'aimerais bien essayer d'ailleurs mais je n'ai pas encore trouver une version de mingw avec support du c++11 en 32 bits pour tester ça.)
Ma version de mingw en 32 bits possède juste les include et j'ai plein de undefined reference to ... hors que mingw64 possède tout et là je n'ai pas de problèmes.