en utilisant std::cout dans plusieurs threads

J'écris un programme simple pour les tests de Threads en c++11, mais std::cout ne fonctionne pas comme prévu.

class Printer
{
public:
    void exec()
    {
        mutex m;
        m.lock();
        cout<<"Hello  "<<this_thread::get_id()<<endl;
        chrono::milliseconds duration( 100 );
        this_thread::sleep_for( duration );
        m.unlock();

    }
};

int main()
{
    Printer printer;

    thread firstThread([&printer](){
        while(1)
            printer.exec();

    });
    thread secondThread([&printer](){
        while(1)
            printer.exec();
    });

    firstThread.join();
    secondThread.join();     
}

certains des résultats :

Hello 11376
Hello 16076
Hello 16076
Hello Hello 11376
16076
Hello 11376
,....

J'ai utilisé mutex pour le verrouillage de fils donc je ne peux pas comprendre pourquoi deux threads s'exécutent std::cout en même temps.
Il coutures très weired pour moi.Quelqu'un peut-il expliquer ce qui se passe!?!

Une fois que vous mettre en œuvre la solution fournie dans la réponse, vous devez également déplacer à l'aide de lock_guards plutôt que manuel de verrouillage/déverrouillage des appels. Et ne pas la peine de rinçage (par exemple, avec endl); il suffit d'utiliser le caractère '\n'.

OriginalL'auteur Omid | 2013-08-16