yohhoyの日記

技術的メモをしていきたい日記

C++ Stream Mutex

C++標準ライブラリのストリームに対する並行入出力操作において、明示的ロックを用いない排他制御の方法について。

2017-11-21追記:C++2a(C++20)標準ライブラリに向けて、同期化出力ストリームが採択された(→id:yohhoy:20171121)。本記事で取り上げたN3395とは異なり、内部で同期化(synchronized)されるラッパーストリームとして設計されている。

排他制御機構を内包したストリームミューテックス(stream mutex)が、2012年9月現在 N3395にて次期C++1y標準ライブラリへ提案されている*1

void parallel_output()
{
  std::mcout << "1" << "2" << "3" << "4" << "5" << std::endl;
  // 暗黙的に行頭でロック獲得&行末でロック解放されるため、
  // std::coutへの文字列"12345\n"出力は必ず排他的に行われる
}

C++03でも利用可能な実装例はGoogle Concurrency Library for C++で提供される。Apache License 2.0。

関連URL

*1:初出は2012年1月のN3354