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 ?!