スレッドをC++ 11でテストするための簡単なプログラムを書いていますが、std::cout
は期待どおり動作しません。複数のスレッドでstd :: coutを使用する
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();
}
結果の一部:
Hello 11376
Hello 16076
Hello 16076
Hello Hello 11376
16076
Hello 11376
,....
私は2つのスレッドが同時にstd::cout
を実行している理由を私は理解して傾けるようにスレッドをロックするミューテックスを使用します。 それは私に非常にうまくつながっています。何が起こっているのか説明できますか?
答えに含まれるソリューションを実装したら、手動でロック/アンロックする代わりに 'lock_guard'を使うべきです。そして、(例えば、 'endl'で)フラッシングを気にしないでください。 '\ n'を使用してください。 – bames53