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を作る人もどこかにいそうだなー。