iostream in multiple threads
実はiostreamってスレッドセーフではない?以前書いたマルチスレッドのテストプログラムのprintfをstd::coutを使って書き換えてみたんだけど、表示が崩れる。
ってことで、クリティカルセクションとか使ってみるわけなんだけど、こんな感じに、
class critical_section { CRITICAL_SECTION m_cs; public: critical_section() { InitializeCriticalSection(&m_cs); } void enter() { EnterCriticalSection(&m_cs); } void leave() { LeaveCriticalSection(&m_cs); } };
critical_sectionクラスとか作っておいて(つってもラップしてるだけだけど)、
critical_section g_cs; // 中略 g_cs.enter(); std::cout << "enter thread " << num << std::endl; g_cs.leave();
って感じで使うのが楽ぽい。さらに気合入れてスレッドセーフなstd::coutを作る人もどこかにいそうだなー。