używając std :: cout w wielu wątkach

Piszę prosty program do testowania wątku w c ++ 11, alestd::cout nie działa tak, jak się spodziewam.

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();     
}

niektóre wyniki:

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

Użyłem mutexa do blokowania wątków, więc nie mogę zrozumieć, dlaczego są wykonywane dwa wątkistd::cout w tym samym czasie. Wydaje mi się bardzo zmęczony. Czy ktoś może wyjaśnić, co się dzieje ?!

questionAnswers(4)

yourAnswerToTheQuestion