C++ mutex dans l'espace de noms std n'est pas le nom d'un type de

Je suis en train d'écrire un simple programme en C++ pour illustrer l'utilisation de verrous. Je suis à l'aide de codeblocks et gnu gcc compilateur.

 #include <iostream>
 #include <thread>
 #include <mutex>
 using namespace std;
 int x = 0; //shared variable

 void synchronized_procedure()
 {
    static std::mutex m;
    m.lock();
    x = x + 1;
    if (x < 5)
    {
       cout<<"hello";
    }
    m.unlock();

 }

int main()
{

   synchronized_procedure();
   x=x+2;
   cout<<"x is"<<x;
}

J'obtiens l'erreur suivante: mutex in namespace std does not name a type.

Pourquoi j'obtiens cette erreur?
N'est pas le compilateur en charge l'utilisation de verrous?

Si vous êtes sur Windows, l'enfilage de la bibliothèque n'est pas mis en œuvre par MinGW encore. J'ai été là et a souhaité qu'il soit différent, mais au moins MSVC a ce travail.
Wow, en regardant autour, apparemment, un des ces (4.7) devrait maintenant avoir un support. Je suis en train de télécharger l'un pour le tester et je vous tiens au courant si il finit de travailler.
Eh bien, ça ne marche pas du tout pour moi. Je ne sais pas si vous auriez plus de chance.
Oh, hé hé. Cette réponse effectivement travaillé! Assurez-vous d'ajouter -static pour les options du linker. Le seul problème est que je ne peux en trouver un avec GCC 4.7.0, ce qui implique de renoncer à certains autres C++11 caractéristiques jusqu'à ce qu'un autre plus récent est construit.
Double Possible de mingw-w64 threads: posix vs win32

OriginalL'auteur arjun | 2013-01-07